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