java - DAO 和依赖注入(inject),建议?

标签 java design-patterns mongodb dao morphia

这是我第一次使用 DAO 模式。据我所知read到目前为止,实现这种模式将帮助我将调用代码( Controller )与任何持久性实现分开——这正是我想要的;也就是说,我不想被限制使用任何特定的数据库或 3rd 方库。

我正在使用 MongoDB 和 morphia(作为示例)创建一些测试代码(以 TDD 方式),其中提供了 morphia BasicDAO类。

据我所知,扩展 BasicDAO<T, V>需要一个接受 Morphia 和 Mongo 对象的构造函数;这些是非常具体的(第 3 方)类型,我真的不希望在 DAO 类本身之外四处游荡。

我怎样才能拥有更多的可插拔架构?我的意思是,我应该如何重新配置​​我的应用程序以使用具有特定配置参数的特定 DAO,在实际源之外?

最佳答案

“可插拔”DAO 层通常/总是基于接口(interface) DAO。例如,让我们考虑一个非常通用的简单的:

public interface GenericDAO <T, K extends Serializable> {  
    List<T> getAll(Class<T> typeClass);   
    T findByKey(Class<T> typeClass, K id);  
    void update(T object);  
    void remove(T object);  
    void insert(T object);  
}

(这是你在 Morphia's generic DAO 中的内容)

然后您可以开发不同的几种通用 DAO 实现,您可以在其中找到不同的字段(体现在构造函数参数、setter 和 getter 等)。让我们假设一个基于 JDBC 的:

public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
    private String db_url;

    private Connection;
    private PreparedStatement insert;
    // etc.
}

一旦实现了通用 DAO(对于具体的数据存储),获得具体的 DAO 将不费吹灰之力:

public interface PersonDAO extends GenericDAO<Person, Long> {

}

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {

}

(顺便说一句,Morphia's BasicDAO 中的内容是 MongoDB 的通用 DAO 的实现)。

可插拔架构中的第二件事是选择具体的 DAO 实现。我建议您阅读 Apress: Pro Spring 2.5 中的第 2 章(“将 Spring 放入“Hello World”)以逐步了解工厂和依赖注入(inject)。

关于java - DAO 和依赖注入(inject),建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049627/

相关文章:

java - 如何处理ajax确认对话框是或否

c++ - 神级的替代品

java - 观察者模式: could event processor affect subject execution?

c# - 等待所有线程完成的有用模式是什么?

mongodb - 在 mongodb 中找到数组的最后一个索引

mongodb - 仅获取 mongodb 中数组属性的第一项

java - 无法理解数组声明 int[] it2= new int[][]{{1}}[0];

java - 在没有默认构造函数的内部类时使用 Jackson 解码 JSON

java - 使用 CDI-Weld 注入(inject)继承的属性值

java - 使用 Java 驱动程序的 MongoDB $near 查询