2013-02-10 2 views
0
public class DAOHelper { 

private static final Map<Class, Class> DTO_TO_DAO_MAP; 
private static final Map<Class, Class> ACDTO_TO_ACDAO_MAP; 


static { 
    DTO_TO_DAO_MAP = new HashMap<Class, Class>(); 
    DTO_TO_DAO_MAP.put(EmployerDTO.class, EmployerDAO.class); 

    ACDTO_TO_ACDAO_MAP = new HashMap<Class, Class>(); 
    ACDTO_TO_ACDAO_MAP.put(AcademicDTO.class, AcademicDAO.class); 

} 

public static BaseDAO<?> getDAO(Class dtoClass) { 
    BaseDAO<?> dao = null; 
    Class daoClass = ACDTO_TO_ACDAO_MAP.get(dtoClass); //here 
    //rest of code here 

} 

Class daoClass = ACDTO_TO_ACDAO_MAP.get(dtoClass);의 감지, 대신 ACDTO_TO_ACDAO_MAP는 어떻게 자동으로이를 감지하는 코드를 얻을 수 있습니다, 그래서 DTO_TO_DAO_MAP 또는 다른 사람이 될 수 있기 때문에 나는 각각에 대해 수동으로하지 않는다 ...자동 코드의이 비율에서 올바른지도

답변

1
내가 명명 규칙 및 반사 사용하는 것이 좋습니다 것

: 코드는 다음과 같이 보일 것 같은 패키지에 해당 DAO (FooDAO)가 모든 DAO (FooDTO) 가정

을 (면책 조항 -이 내 머리 꼭대기에서 떨어져 있고 컴파일 할 때 2 개 또는 2 개가 필요할 수 있습니다.)

public static BaseDAO<?> getDAO(Class dtoClass) { 

    String dtoClassName = dtoClass.getName(); 
    String daoClassName = dtoClassName.replaceAll("DTO$", "DAO"); 
    Class daoClass = Class.forName(daoClassName); 
    retrun daoClass.newInstance(daoClass); 
} 

물론이 논리는 다른 명명 규칙이나 패키지를 수용하기 위해 쉽게 변경 될 수 있습니다.

관련 문제