【发布时间】:2011-11-16 04:31:24
【问题描述】:
根据我的帖子here,我有以下 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> 提供的 morphia,但这不会让我轻松地从 MongoDB 更改为 JDBC 等.
【问题讨论】:
标签: java design-patterns mongodb dao morphia