将连接封装在DAO中是否更好,即让DAO创建或检索连接然后关闭,或者最好将连接传递到DAO并处理DAO外部代码中的详细信息?
跟进:如果将连接封装在DAO中,如何管理关闭连接?
答案 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接口保持不变,但连接细节会发生变化,因此您无法在外部看到它。