Должен ли я передать или инкапсулировать соединение в DAO? - PullRequest
5 голосов
/ 09 марта 2010

Лучше ли инкапсулировать соединение внутри DAO, т. Е. Заставить DAO создать или извлечь соединение, а затем закрыть или лучше передать соединение в DAO и обработать детали в коде, внешнем по отношению к DAO?

Последующие действия: как вы управляете закрытием соединений, если инкапсулируете соединение внутри DAO?

Ответы [ 4 ]

3 голосов
/ 10 марта 2010

Я думаю, что вы ответили на свой вопрос. Базовый шаблон проектирования объясняет, что DAO должен создавать / извлекать соединение (скажем, через фабрику) и скрывать их от любых вызывающих абонентов, таких как классы уровня обслуживания.

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

Видите ли вы какие-либо достоинства в сохранении этого внешнего?

3 голосов
/ 09 марта 2010

DAO должен выполнять операции CRUD и скрывать эти операции от вызывающих. Таким образом, вы должны инкапсулировать соединение.

С другой стороны, если верхние уровни координируют DAO (например, транзакции), вы также можете передать соединение в DAO (и закрыть его на том же уровне, на котором вы его открывали, а не в DAO). *

В итоге ... это действительно зависит от ответственности каждого слоя вашего приложения. Должны ли абоненты заботиться о том, где DAO извлекают данные или нет? Если нет, то инкапсулируйте соединения.

2 голосов
/ 10 марта 2010

Исходя из этого, с точки зрения простоты использования и стандартов, я думаю, что вы хотите, чтобы DAO позаботился о связях. Это ведь главная функция доступа к данным.

Подумайте о своем использовании, хотите ли вы, чтобы код представления / бизнес-уровня, использующий DAO, знал достаточно о базе данных, чтобы создать соединение для передачи в DAO? Что, если вам нужно переместить базу данных или переименовать ее, в этот момент очень приятно инкапсулировать соединения.

Использование DAO, которая управляет своими собственными соединениями, также позволяет более кратко использовать объекты в вызывающем коде, повышая общую читабельность, IMO.

0 голосов
/ 18 марта 2010

Я думаю, что ключевым моментом DAO является то, что вы можете поменять реализацию, не обращая внимания на остальную часть приложения.Я фактически сделал это на проекте.Интерфейс DAO остается тем же, но детали соединения изменяются, поэтому вы НЕ МОЖЕТЕ его видеть снаружи.

...