1
按我的职位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
混淆?在这个时候,我认为工厂方法是矫枉过正。因此,相反,它更有意义,简单地从客户端构建DAO像这样:
ObjectDAOMongoDBImpl objectDAO = new ObjectDAOMongoDBImpl(clazz, mongo, morphia, dbName);
由于clazz
是动态的,它可能会被证明是一场噩梦试图改变工厂方法接受的说法,打破我的通用接口。
有没有更清洁的方法?我可以简单地扩展提供BasicDAO<T, K>
的吗啡,但这不会让我轻易改变从MongoDB的到JDBC等
所以你说我的方法很好(没有_factory method_,我应该只使用_Guice_之类的东西,而不是在客户端代码中定义具体的实现类? – wulfgarpro