Согласно моему посту здесь , у меня есть следующая иерархия 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 при условии BasicDAO<T, K>
, но это не позволило бы мне легко перейти с MongoDB на JDBC и т. Д.