2017-12-19 14 views
1

프로젝트에 문제점이 있습니다.오브젝트 테이블의 행을 캐스팅하기위한 디자인 패턴

내가 다른 유형의 데이터와 데이터베이스에서 개체의 행을 검색하고 있습니다

Object[] userInformationsRow = getUserInformationsFromDataBase(); 
int idColumn = 0; 
int nameColumn = 1; 
int birthDateColumn = 2; 
// 
Integer idUser = (Integer)userInformationsRow[idColumn]; 
String nameUser = (String)userInformationsRow[nameColumn]; 
Date birthDateUser = (Date)userInformationsRow[birthDateColumn]; 

그 종류를 개발하는 또 다른 방법이있다 :이 경우에 대한 디자인 패턴이 있는지 알고 싶습니다 코드에 오래 버틸 수 있고 앞으로 변경하기 어려운 코드가 있습니다.

+2

사용하여 JPA API를 통해 바람직 최대 절전 모드와 같은 ORM (객체 관계형 매핑) 프레임 워크, :,이 어댑터의 일종이다. –

+1

[Data Mapper] (https://martinfowler.com/eaaCatalog/dataMapper.html) –

답변

0

나는 이런 식으로 뭔가 할 것 :

int ix = 0; 
Integer idUser = (Integer)userInformationsRow[ix++]; 
String nameUser = (String)userInformationsRow[ix++]; 
Date birthDateUser = (Date)userInformationsRow[ix++]; 

을하지만 당신이 필요로하는 분야와 UserInformation 클래스를 사용하는 것을 고려하고 어떤 식 으로든 당신에게 데이터베이스를 매핑.

1

getUserInformationsFromDataBase()에서 수업을 반납 할 수 있습니다. 이것은 매우 일반적입니다. 당신이 정말로 그 이름을 필요로하는 경우에, 당신은 getUserInformationsFromDataBase()의 제어 할 수없는 경우, 당신은 UserInfos 뒤에이 혼란을 숨길 수 DTODAO (또는 저장소)

UserInfos user = getUserInformationsFromDataBase(); 
user.getId(); 
user.getName(); 
user.getBirthDate(); 

검색

class UserInfos { 
    private static final int ID = 0; 
    private static final int NAME = 1; 

    private final Object[] datas; 
    public UserInfos(Object[] datas) { 
     this.datas = datas; // This is NOT a good idea, search for array defensive copy 
    }  

    public Integer getId() { 
     return (Integer) datas[ID]; 
    } 

    public Integer getName() { 
     return (String) datas[NAME]; 
    } 
}