DAO 和依赖注入,有建议吗?

2023-12-10

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

我正在使用 MongoDB 和吗啡(作为示例)创建一些测试代码(以 TDD 方式),并提供吗啡BasicDAO class.

据我所知,延长BasicDAO<T, V>需要一个接受 Morphia 和 Mongo 对象的构造函数;这些是非常具体的(第 3 方)类型,我真的不想在 DAO 类本身之外浮动。

我怎样才能拥有更多的可插拔架构?我的意思是,我应该考虑什么才能将我的应用程序配置为在实际源外部使用具有特定配置参数的特定 DAO?


“可插入”DAO 层通常/总是基于接口 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 的通用 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> {

}

and

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

}

(顺便说一句,你有什么Morphia 的 BasicDAO是 MongoDB 通用 DAO 的实现)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DAO 和依赖注入,有建议吗? 的相关文章

随机推荐