私のポストhereごとに、私は以下のDAOの階層を持っているとして:DAOを工場なしで呼び出すには?
GenericDAO.java
public interface GenericDAO<T, K> {
public K insert(T object);
public void remove(K objectId);
// extensible
}
GenericDAOMongoDBImpl.java
public class GenericDAOMongoDBImpl<T, K> extends BasicDAO<T, K> implements GenericDAO<T, K> {
public GenericDAOMongoDBImpl(Class<T> entityClass, Mongo mongo, Morphia morphia, String dbName) {
super(entityClass, mongo, morphia, dbName);
}
public K insert(T object) {
// TODO Auto-generated method stub
return null;
}
public void remove(K objectId) {
// TODO Auto-generated method stub
}
}
ObjectDAO.java
public interface ObjectDAO extends GenericDAO<Object, ObjectId> {
}
ObjectDAOMongoDBImpl.java
public class ObjectDAOMongoDBImpl extends GenericDAOMongoDBImpl<Object, ObjectId> implements ObjectDAO {
public ObjectDAOMongoDBImpl(Class<Object> entityClass, Mongo mongo, Morphia morphia, String dbName) {
super(entityClass, mongo, morphia, dbName);
}
}
私はObjectDAO
を使用して行くべきかについて混乱していますか?現時点では、私はファクトリーメソッドが過剰であると思います。破壊、clazz
として
ObjectDAOMongoDBImpl objectDAO = new ObjectDAOMongoDBImpl(clazz, mongo, morphia, dbName);
は動的である、それは引数を受け入れるようにファクトリメソッドを変更しようとしている悪夢を証明されている可能性がありますので、代わりに、それはそうのように、単純にクライアントからDAOを構築するために、より理にかなっています途中で私の汎用インターフェース。
クリーンな方法はありますか? 、私は単にBasicDAO<T, K>
提供morphiaを拡張している可能性が、これは私が簡単にJDBC MongoDBのからに変更することはできなかっただろうなど
私のアプローチはうまくいっていると言っています(_factoryメソッドはありません、具体的な実装クラスをクライアントコードで定義するのではなく、_Guice_のようなものを使用する必要があります)。 – wulfgarpro