微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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> {

}

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

}

(顺便说一句,在Morphia的BasicDAO中,您拥有是MongoDB通用DAO的实现)。

解决方法

这是我第一次使用DAO模式。从我到目前为止,实现这种模式将帮助我从任何持久性实现单独我的调用代码(控制器)
-正是我想要的; 也就是说,我不想因为使用任何特定的数据库或第三方库而感到沮丧。

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

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

我如何拥有更多的可插拔架构?我的意思是,我应该考虑如何重新配置​​我的应用程序以使用具有特定配置参数的特定DAO,而不是实际来源?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。