2010-03-09 2 views
5

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

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

ответ

3

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

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

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

+0

Я думал о создании фабрики и о том, что вызов DAO, который по сути является инкапсуляцией. –

+0

Заводы DAO используются для производства конкретных DAO (реализаций). Я не уверен, что понимаю, что вы подразумеваете под «созданием фабрики и с вызовом DAO»! – 2010-03-09 15:52:16

+0

К сожалению, я имел в виду фабрику соединений, а не завод DAO. –

2

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

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

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

3

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

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

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

0

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

Смежные вопросы