根据我在这里的帖子,我有以下 DAO 层次结构:
通用DAO.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
}
}
对象DAO.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
是动态的,它可能被证明是一场噩梦,试图改变工厂方法来接受一个参数,一路破坏我的通用接口。
有没有更清洁的方法?我本可以简单地扩展提供的morphiaBasicDAO<T, K>
,但这不会让我轻松地从MongoDB更改为JDBC等。