lec-14-DAO-v001
.pdfПример реализации шаблонов
DAO и Session Facsade
Основы разработки |
20 |
корпоративных
WEB приложений на языке Java
ОБСУЖДАЕМЫЕ ВОПРОСЫ
•Паттерны Data Access Object (или DAO) и
Session Facade
•Пример реализации DAO
•Классы сущности, представляющие модель
•Особенности реализации
•Интерфейс BookStoreDAO
•Класс DerbyDAO
•Класс AuthorService
ПАТТЕРНЫ DAO И SESSION FACADE
Код компонентов, которые осуществляют обработку данных, может совмещать бизнес логику с логикой доступа к данным.
Это делает трудным замену или модификацию ресурсов данных приложения.
Кроме того, одни и те же компоненты приложения, обрабатывающие данные могут использовать, как разные типы источников (например, базы данных и XML файлы), так и разные методы их использования (например, базы данных разных вендоров).
Решение проблемы разделения специфики хранения и обработки предлагают паттерны DAO и Session Facade
ПАТТЕРН SESSION FACADE
Большинство бизнес процессов содержат сложные манипуляции с бизнес классами.
Бизнес классы участвуют во множестве бизнес процессов или в рабочем потоке.
Сложные процессы, которые вовлекают множество бизнес объектов могут приводить к тесному взаимодействию между этими классами и в результате снижать гибкость и ясность конструирования.
Сложные взаимоотношения между низкоуровневыми бизнес компонентами делают клиентов сложными для написания.
ПАТТЕРН SESSION FAÇADE
(ПРОДОЛЖЕНИЕ)
Шаблон Session Facade («фасад сеанса») определяет высокоуровневый компонент, который содержит и централизует сложные взаимодействия между низкоуровневыми бизнес компонентами.
Session Facade может быть реализован как сеансовый компонент EJB или простой сессионный бин. Он обеспечивает клиентов одним интерфейсом для поддержки функциональности приложения или подмножества объектов приложения.
ПАТТЕРН SESSION FACADE (СХЕМА)
Объект Session Facade также может действовать
как Mediator между бизнес объектами, отделяя их программные интерфейсы друг от друга.
В нашем случае, когда мы не используем EJB компоненты, наши службы будут реализованы в виде POJO далеко не идеально, но достаточно, чтобы показать возможность реализации.
ПАТТЕРН SESSION FACADE (ОКОНЧАНИЕ)
Объекты Session Facade управляют запросами, приходящими от презентационного узла и для выполнения бизнес логики приложения могут вызывать другие объекты Enterprise Session Beans, которые выполняют транзакции, тогда как Entity компоненты представляют бизнес данные в виде набора атрибутов.
Session Facade абстрагирует взаимодействия бизнес объектов и обеспечивает уровень служб, предоставляющий только необходимые интерфейсы. Таким образом, он скрывает от клиента (от презентационного слоя, в данном случае) сложность взаимоотношений между участниками этих взаимодействий.
Session Facade управляет взаимодействиями между объектами бизнес данных и бизнес служб, участвующих в рабочем процессе, и инкапсулирует связанную с этим бизнес-логику.
ПАТТЕРН DATA ACCESS OBJECT (DAO)
Отделяет обработку данных, от механизма доступа к данным
Адаптирует API доступа к специфическим ресурсам данных клиентского интерфейса
Паттерн DAO позволяет модифицировать механизм доступа к данным независимо от кода, который использует данные, а также обеспечивает:
Абстрагирование и инкапсуляцию механизмов доступа к данным
Большую гибкость при разработке
Независимость от способа доступа, предоставленного вендором
Независимость реализации доступа к ресурсам
Легкую миграция на JPA
Улучшение расширяемости
Предотвращает необходимость не нужных передач данных между узлами реализаций зависимых объектов, как легких, классов постоянства
ОБЪЕКТЫ, РЕАЛИЗУЮЩИЕ ПАТТЕРН DAO ОБЫЧНО РАЗМЕЩАЮТСЯ НА БИЗНЕС УЗЛЕ
DataAccessObject
является первичным объектом данного паттерна.
DataAccessObject абстрагирует используемую реализацию доступа к данным для BusinessObject, обеспечивая прозрачный доступ к источнику данных. BusinessObject передает также ответственность за выполнение операций загрузки и сохранения данных объекту DataAccessObject.
ПАТТЕРН DAO (ПРОДОЛЖЕНИЕ)
Паттерн DAO попадает в категорию структурных шаблонов, поскольку он описывает – как один бизнес объект может быть разделен на несколько объектов, выполняющих разные роли (объекты извлекающие данные из источников и объекты, использующие эти данные), а также описывает - как эти объекты могут быть скомбинированы для формирования большого модуля бизнес узла.
Паттерн DAO не описывает то, как создавать объекты базы данных или - как передаются данные между объектами.
В каталоге шаблонов J2EE DAO помещен в группу шаблонов осуществляющих интеграцию, поскольку он используется для интеграции бизнес объектов с различными типами источников данных.