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...

4

1 に答える 1

1

命名規則とリフレクションを使用することをお勧めします。

すべてのDAO(FooDTO)に対応するDAO(FooDAO)が同じパッケージに含まれているとすると、コードは次のようになります(免責事項-これは頭から離れており、コンパイルに1〜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);
}

もちろん、このロジックは、さまざまな命名規則やさまざまなパッケージに対応するように簡単に変更できます。

于 2013-02-10T01:54:49.470 に答える