当前位置:  开发笔记 > 编程语言 > 正文

DAO和依赖注入,建议?

如何解决《DAO和依赖注入,建议?》经验,为你挑选了1个好方法。

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

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

据我所知,扩展BasicDAO需要一个接受Morphia和Mongo对象的构造函数; 这些是非常具体的(第三方)类型,我真的不想在DAO类本身之外浮动.

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



1> jalopaba..:

"可插拔"DAO层通常/总是基于接口DAO.例如,让我们考虑一个非常通用的简单方法:

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

(这是你在Morphia的通用DAO中所拥有的)

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

public class GenericDAOJDBCImpl implements GenericDAO {
    private String db_url;

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

一旦实现了通用DAO(对于具体的数据存储区),获得具体的DAO将是没有道理的:

public interface PersonDAO extends GenericDAO {

}

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl implements PersonDAO {

}

(顺便说一下,你在Morphia的BasicDAO中所拥有的是MongoDB的通用DAO的实现).

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

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有