ここの投稿によると、次の 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
?をどのように使用すればよいか混乱しています。現時点では、ファクトリ メソッドはやり過ぎだと思います。代わりに、次のようにクライアントから DAO を単純に構築する方が理にかなっています。
ObjectDAOMongoDBImpl objectDAO = new ObjectDAOMongoDBImpl(clazz, mongo, morphia, dbName);
動的であるため、引数を受け入れるようにファクトリ メソッドclazz
を変更しようとする悪夢が証明され、途中で汎用インターフェイスが壊れた可能性があります。
よりクリーンな方法はありますか?提供されたmorphiaを単純に拡張することもできましたが、 MongoDBからJDBCなどBasicDAO<T, K>
に簡単に変更することはできませんでした。