Я должен передать в или инкапсулировать соединение в ДАО?

Лучше инкапсулировать соединение в ДАО, т.е. иметь ДАО создают или получают соединение и затем закрываются, или лучше передать соединение в ДАО и обработать детали в коде, внешнем к ДАО?

Продолжение: Как делают Вас чесотка заключительные соединения, если Вы инкапсулируете соединение в ДАО?

5
задан James McMahon 19 March 2010 в 12:11
поделиться

4 ответа

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

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

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

3
ответ дан 14 December 2019 в 04:35
поделиться

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

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

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

3
ответ дан 14 December 2019 в 04:35
поделиться

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

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

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

2
ответ дан 14 December 2019 в 04:35
поделиться

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

0
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: