2013-02-10 56 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(FooDTO)在同一個包一個相應的DAO(FooDAO),代碼看起來像這樣(免責聲明 - 這是我的頭頂,可能需要一個tweek或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); 
} 

當然,這個邏輯可以很容易地改變,以適應不同的命名約定或不同的包。