Паттерны проектирования EJB
Распределенное приложение
Фасад сессии (Session Facade)
Как обеспечить клиенту возможность вызвать всю бизнес логику юзкейза в одной транзакции одним удаленным вызовом? Обернуть слой сервисов, содержащих бизнес – логику, в слой сервисов -фасадов.
Фасад сессии (Session Facade)
Достоинства: Меньшее количество удаленных вызовов; Четкое и строгое отделение бизнес логики от логики представления; Меньшая связность слоев системы; Вся бизнес-логика может выполняться в одной целостной транзакции; Недостаток: Разработчики клиентских приложений ограничены набором доступных методов в сервисах-фасадах.
Фасад сессии (Session Facade) Достоинства: Меньшее количество удаленных вызовов; Четкое и строгое отделение бизнес логики от логики представления; Меньшая связность слоев системы; Вся бизнес-логика может выполняться в одной целостной транзакции; Недостаток: Разработчики клиентских приложений ограничены набором доступных методов в сервисах-фасадах.
Серверная команда (EJB Command)
Необходимо обернуть все вызовы серверных сервисов, производимые клиентом, в легковесный объект Command, чей метод Execute исполняется на сервере. Достоинства: Все достоинства паттерна Session Facade; Большие возможности для распараллеливания работы: Меньшая зависимость разработчиков представления от набора методов фасадного сервиса; Легкость замены реальной команды заглушкой;
Серверная команда (EJB Command) Недостатки: Большая по сравнению c Session Façade связность между слоем фасадных сервисов и клиентом; Ограниченные возможности по выбросу исключений; В крупномасштабных проектах велик риск взрыва количества классов команд;
Серверная команда (EJB Command) Class WithdrawFundsCommand inherits AbstractCommand { public void execute() throws Command Exception { //получить сервис логирования SecurityService securityService = ServiceFactory.create(security); //выполнить логический вход User user = securitySerivce.login(m_login, m_password); //получить сервиса работы со счетом и снять сумму FundsService fundsService = ServiceFactory.create(funds); fundsService.withdraw(user, m_amount); }
Паттерны обмена данными между слоями 1. Транспортный объект, дублирующий структуру БД (Domain Data Transfer Object); 1. Транспортный объект, дублирующий структуру слоя представления (Custom Data Transfer Object); 1. Транспортный словарь (Data Transfer HashMap); 1. Фабрика транспортных объектов (Data Transfer Object Factory).
Паттерны проектирования EJB Паттерны хранения данных 1. Номер версии (Version Number); 1. Команда доступа к данным (Data Persistence Command); Паттерны слоя представления 1. Бизнес – обертка (Business Delegate).
Паттерны проектирования EJB