我应该在DAO中传入或封装连接吗?

时间:2010-03-09 15:14:21

标签: language-agnostic persistence encapsulation dao

将连接封装在DAO中是否更好,即让DAO创建或检索连接然后关闭,或者最好将连接传递到DAO并处理DAO外部代码中的详细信息?

跟进:如果将连接封装在DAO中,如何管理关闭连接?

4 个答案:

答案 0 :(得分:3)

DAO应该执行CRUD操作并将这些操作隐藏在调用者之外。所以你应该封装连接。

另一方面,如果上层正在协调DAO(例如事务),那么您也可以将连接传递给DAO(并在您打开它的同一级别关闭它,而不是在DAO中)。

底线是......它实际上取决于应用程序的每一层都有的责任。呼叫者是否应该关注DAO检索数据的位置?如果没有,则封装连接。

答案 1 :(得分:3)

我想你已回答了自己的问题。基本设计模式解释了DAO应该创建/检索Connection(比如通过工厂)并隐藏任何调用者的服务层类。

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

你认为保持这种外在的任何优点吗?

答案 2 :(得分:2)

从纯粹的可用性和标准角度来看,我认为你希望DAO能够处理这些连接。毕竟这是数据访问的主要功能。

考虑一下您的使用,您是否希望使用DAO的表示/业务层代码足够了解数据库以创建传递给DAO的连接?如果您需要移动数据库或重命名它,那么如果将连接封装起来非常好。

使用管理自己连接的DAO也可以更简洁地使用调用代码中的对象,从而提高整体可读性,IMO。

答案 3 :(得分:0)

我认为DAO的关键点在于,您可以在不知道或关心其他应用程序的情况下更换实现。我实际上是在一个项目上完成的。 DAO接口保持不变,但连接细节会发生变化,因此您无法在外部看到它。