IBM Rational Software Architect: создание комбинированных шаблонов

Йи-Сиу Вэй, старший инженер-программист, IBM Жанет Вонг, старший инженер, IBM Скотт Шнайдер, инженер-программист, консультант, IBM

О чем эта статья

Шаблоны часто связаны друг с другом и, соответственно, используются совместно для создания более объемных архитектур и проектов. Например, представим, что вы ответственны за решение проблемы, требующей применения нескольких шаблонов, и будете решать эту проблему неоднократно, каждый раз, главным образом, с тем же самым набором шаблонов. Эффективным решением могло бы быть создание комбинированного шаблона, содержащего в себе набор шаблонов компонентов.

Данная статья расширяет восьмую часть серии developerWorks "Создание J2EE-приложений с использованием IBM Rational Software Architect Enterprise Patterns". В ней рассказывается, как создать комбинированный шаблон. Такой готовый к повторному использованию комбинированный шаблон позволяет быстро создавать J2EE-приложения (Java 2 Platform, Enterprise Edition), используя инструментальные средства IBM Rational Software Architect. Вы узнаете, как объединить два корпоративных шаблона в их обычно используемых конфигурациях для создания комбинированного шаблона. Затем вы сможете применить этот комбинированный шаблон для информационной модели вашего бизнеса, для генерирования J2EE-артефактов для модели и методов-заместителей для бизнес-логики, как если бы вы применили два корпоративных шаблона по отдельности.

Комбинированные шаблоны

Хотя e-business-шаблоны фиксируют передовой опыт и знания разработки решений в документированной форме (в виде спецификаций шаблонов), средства мета-программирования IBM Rational Software Architect дают возможность кодировать шаблоны в готовые к повторному использованию программные артефакты, называемые основанными на шаблонах микро-программами (pattern-based micro-tools) или реализациями шаблонов (pattern implementations). В данной статье шаблонами (patterns) называются кодированные, готовые к повторному использованию, основанные на шаблонах микро-программы.

Поскольку все большее количество шаблонов становится доступным для повторного использования, комбинированные шаблоны могут стать более привычной практикой разработки решений, использующих несколько шаблонов более низкого уровня. Затем можно использовать эти "рецепты шаблонов" для документирования и руководства объединенным использованием выбранных шаблонов и других артефактов при необходимости быстрого решения проблемы. Кроме этого, комбинированные шаблоны вбирают в себя, в кодированной шаблонной форме, традиционную практику и передовой опыт разработки решений, использующих несколько шаблонов. Комбинированные шаблоны поднимают абстракцию разработки программного обеспечения на уровень, подходящий для решения проблем конкретной предметной области.

Совместимость шаблонов

Хотя шаблоны могут быть скомбинированы на основе их назначения и взаимодействий входных и выходных параметров, семантическая совместимость компонентных шаблонов не просто проанализировать механически. Это происходит, в основном, из-за отсутствия полных семантических спецификаций для шаблонов, отличающихся по типу и многообразию входных параметров. Например, для использования профилей ожидаемые стереотипы элемента, связываемого с параметром шаблона, и ожидаемый результат трансформации шаблона могут быть, самое большее, документированы только неформально в описаниях шаблонов.

Несмотря на это ограничение, композиция шаблонов довольно близка другим методикам программирования, в которых опыт и предыдущие примеры обычно указывают, как использовать несколько сервисов вместе для создания сервисов или решений более высокого уровня. Целью комбинирования шаблонов является интеграция общеизвестных приемов использования шаблонов, работающих совместно. Существует несколько кросс-шаблонных семантических проблем при комбинировании шаблонов для автоматизации проверенной общей практики.

Пример создания комбинированного шаблона из двух корпоративных шаблонов

Создание комбинированного шаблона имеет значение в том случае, если вы полагаете, что комбинация шаблонов будет неоднократно использована при разработке нескольких решений или улучшений решений проблем специфической предметной области. Комбинированный шаблон включает в себя шаблон использования компонентных шаблонов и связанных с ними артефактов.

Данный пример использует корпоративные шаблоны Session Facade и Business Delegate (см. рисунок 1). Шаблон Session Facade генерирует класс сессионного компонента для работы в качестве интерфейсной части набора классов компонентов управления данными, моделирующих бизнес-информацию. Класс сессионного компонента обеспечивает сервисы бизнес-информации. Шаблон Business Delegate генерирует стандартный Java™-класс из класса сессионного компонента. Можно добавить бизнес-логику к Java-классу, для того чтобы бизнес-клиенты обращались к бизнес-информации через бизнес-логику. Business Delegate также скрывает некоторые характеристики бизнес-сервисов от клиента, например, удаленность и выбранные технологии.

Рисунок 1. Взаимоотношения корпоративных шаблонов
Рисунок 1. Взаимоотношения корпоративных шаблонов

Экземпляры Session Facade и Business Delegate, показанные на рисунке 2, включают несколько параметров шаблонов для настройки.

Рисунок 2. Шаблоны Session Facade и Business Delegate
Рисунок 2. Шаблоны Session Facade и Business Delegate

Если в своей среде вы разрабатываете много решений, применяя шаблоны Session Facade и Business Delegate, будет полезен комбинированный шаблон, называемый Business Delegate Facade, комбинирующий два компонента.

Шаблоны обнаруживаются, а не придумываются. Этот же принцип применим и к комбинированным шаблонам. Следовательно, перед попыткой скомбинировать шаблон важно рассмотреть использование существующих шаблонов в прошлом, чтобы выяснить, применялись ли шаблоны совместно и как именно, как взаимодействовали их параметры, какие параметры должны быть сконфигурированы и какие параметры часто используют одинаковые фиксированные значения.

В данном примере, основанном на опыте использования, мы знаем, как эти два корпоративных шаблона работают вместе и как взаимодействуют их параметры. Следовательно, мы проанализируем зависимости их параметров и выполним делегирование шаблонов в интегрированную среду шаблонов Rational Software Architect для активизации комбинированного шаблона, выполняющего операции, которые ранее выполняли два компонентных шаблона по отдельности.

Для создания комбинированного шаблона с названием Business Delegate Facade выполните следующие действия:

  1. Проанализируйте вход и выход компонентных шаблонов.
  2. Определите параметры комбинированного шаблона.
  3. Проанализируйте зависимости параметров.
  4. Определите операции делегирования параметров и зависимостей.

На рисунке 3 изображена последовательность действий и приведено краткое резюме по каждому из них.

Рисунок 3. Действия по разработке комбинированного шаблона
Рисунок 3. Действия по разработке комбинированного шаблона

Также вы можете решить назначить параметрам значения по умолчанию (или убрать видимость параметра), основываясь на опыте использования компонентных шаблонов в прошлом. Это может упростить работу пользователей в дальнейшем.

1. Анализ ввода-вывода

На рисунке 4 изображена взаимосвязь ввода/вывода и зависимости параметров двух компонентных шаблонов. Параметр Session Facade экземпляра шаблона Session Facade указывает выходные данные шаблона или класса сессионного компонента, который создается при ручном связывании классов компонентов управления данными с входным параметром Entity Bean. После его создания класс сессионного компонента вручную связывается с входным параметром Business Service экземпляра шаблона Business Delegate. Это создает стандартный Java-класс, и имя этого класса появляется в выходном параметре Business Delegate экземпляра шаблона Business Delegate.

Рисунок 4. Анализ параметров
Рисунок 4. Анализ параметров

2. Параметры комбинированного шаблона

Поскольку выходной параметр Session Facade шаблона Session Facade передается во входной параметр Business Service шаблона Business Delegate, единственный параметр Session Bean Class комбинированного шаблона Business Delegate Facade объединяет оба параметра компонентных шаблонов. Этот параметр реализует канал передачи данных между двумя компонентными шаблонами через систему делегирования зависимостей и параметров шаблонов Rational Software Architect.

Новый шаблон имеет параметр, называемый Business Delegate Class, для стандартного Java-класса, генерируемого шаблоном Business Delegate. Новый шаблон имеет также два дополнительных входных параметра:

  • Параметр Entity Classes, соответствующий параметру Entity Bean шаблона Session Facade.
  • Параметр Remote Interface, соответствующий параметру Use Remote EJB Interfaces шаблона Business Facade.

Каждый параметр имеет такой же тип, что и соответствующий параметр в компонентном шаблоне (cм. рисунок 5):

  • Business Delegate Class: Стандартный Java-класс, предоставляющий бизнес-сервисы.
  • Session Bean Class: Предоставляет сервисы бизнес-данных.
  • Entity Classes: Модель данных, управляемая и используемая бизнес-сервисами.
  • Remote Interface: Указывает, поддерживается ли удаленный интерфейс.

Рисунок 5. Параметры нового шаблона
Рисунок 5. Параметры нового шаблона

3. Анализ зависимостей параметров

Как показывают пунктирные стрелки на рисунке 4, параметр Session Facade зависит от параметра Entity Bean, а параметр Business Delegate зависит от параметра Business Service и от параметра Use Remote EJB Interfaces.

Такая же зависимость параметров должна сохраняться в комбинированном шаблоне. На рисунке 5 параметр Session Bean Class зависит от параметра Entity Classes, а параметр Business Delegate Class зависит от параметра Remote Interface. Следовательно, параметр Session Bean Class в комбинированном шаблоне представляет оба параметра (Business Service и Session Facade) в двух компонентных шаблонах вследствие следующей цепочки зависимостей:

Business Delegate > Business Service > Session Facade parameter > Entity Bean.

Итак, на рисунке 4 параметр Business Delegate Class зависит от параметра Session Bean Class. Параметр Business Delegate Class также косвенно зависит от параметра Entity Classes.

4. Анализ делегирования

Параметры в комбинированном шаблоне делегируют свои операции компонентным шаблонам двумя способами:

  • Делегирование зависимостей: Зависимости между параметрами комбинированного шаблона (например, между Business Delegate Class и Session Bean Class, между Session Bean Class и Entity Classes, между Business Delegate Class и Remote Interface) делегируются соответствующим зависимостям в компонентных шаблонах. Дополнительная зависимость между параметрами Business Delegate Class и Entity Classes, которую вы видите в этом анализе, может быть добавлена в комбинированный шаблон для получения запроса на обновление Business Delegate Class при изменении параметра Entity Classes.
  • Делегирование параметров: Операции expand параметров комбинированного шаблона (Business Delegate Class, Session Bean Class, Entity Classes и Remote Interface) делегируются соответствующим параметрам компонентных шаблонов. Теперь, когда параметр Session Bean Class представляет оба параметра (Session Facade и Business Service), его операция expand должна делегироваться обоим параметрам компонентного шаблона.

Реализация комбинированного шаблона

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

  1. Создайте шаблон Business Delegate Facade в проекте подключаемых модулей шаблонов Rational Software Architect, используя макет шаблона для добавления четырех параметров и для создания зависимостей параметров, основываясь на проведенном в предыдущем разделе анализе проекта (см. рисунок 6).

Рисунок 6. Экземпляр комбинированного шаблона
Рисунок 6. Экземпляр комбинированного шаблона

  1. В сгенерированном коде шаблона в верхней части файла BusinessDelegateFacade.java, расположенного в папке шаблона, добавьте две команды import для делегирования параметров и зависимостей (см. листинг 1).

  2. В классе BusinessDelegateFacade этого же Java-файла добавьте два выражения PatternDefinitionUsage (см. листинг 2) для создания ссылок использования шаблонов на два компонентных шаблона.

4. Для каждого параметра, имеющего зависимости от других параметров, добавьте выражение PatternDependencyDelegate в конструктор внутреннего класса (inner class) зависимости параметра (см. листинг 3). В данном случае:

  • Session Bean Class имеет зависимость от Entity Classes. Делегируйте эту операцию зависимости соответствующему параметру в шаблоне Session Facade.
  • Business Delegate Class имеет зависимость от Session Bean Class. Аналогично, делегируйте операцию зависимости шаблону Business Delegate.
  • Business Delegate Class также имеет зависимость от Remote Interface. Делегируйте операцию зависимости шаблону Business Delegate.

5. Как общее правило, добавьте выражение PatternParameterDelegate в конструктор класса каждого параметра комбинированного шаблона (см. листинг 4). Это делается для делегирования их операции expand в операцию соответствующего параметра компонентных шаблонов. Это гарантирует, что все операции expand параметров компонентов могут быть должным образом активированы из комбинированного шаблона. В данном случае это означает, что вы:

  • Делегируете параметр Entity Classes параметру Entity Bean шаблона Session Facade.
  • Делегируете параметр Remote Interface параметру Use Remote EJB Interfaces шаблона Business Delegate.
  • Делегируете параметр Session Bean Class параметру Session Facade шаблона Session Facade и параметру Business Service шаблона Business Delegate.
  • Делегируете параметр Business Delegate Class параметру Business Delegate шаблона Business Delegate.

Применение нового комбинированного шаблона

Вы можете применить комбинированный шаблон к модели пользовательских данных точно так же, как и шаблон Session Facade (см. рисунок 7). Просто выполните следующие действия:

  1. Создайте класс компонента управления данными Customer.
  2. Укажите имя класса CustomerSB для Session Bean Class и сгенерируйте модель класса сессионного компонента.
  3. Перетяните класс Customer на параметр Entity Classes для обновления класса сессионного компонента.
  4. Укажите имя класса CustomerBD для Business Delegate Class, а затем сгенерируйте модель Java-класса.

Примечание: Стереотип service в сгенерированном классе сессионного компонента не корректен. В данном примере, до того как эта проблема была исправлена, мы вручную добавили стереотип перед шагом 4.

Рисунок 7. Применение комбинированного шаблона
Рисунок 7. Применение комбинированного шаблона 

Исключение параметров

Параметры шаблона предоставляют точки изменения (variation points) для настройки. В зависимости от опыта использования шаблона вы можете дать параметру значение по умолчанию или удалить его из комбинированного шаблона путем жесткого кодирования. Это может еще больше упростить использование шаблона.

В данном примере вы, возможно, захотите указать параметру Remote Interface значение по умолчанию true для поддержки удаленного интерфейса или вообще удалить параметр, установив значение в исходном коде шаблона. Также можно удалить видимость параметра класса-посредника Session Bean Class из экземпляра шаблона, если сгенерированный класс сессионного компонента не будет использован или связан с другими элементами модели в решении. Подробности этого метода и кодирование описываются в отдельной статье данной серии.

Ценность изученного

В данной статье был рассмотрен общий метод создания комбинированных шаблонов из существующих шаблонов. На подробном примере было показано, как спроектировать и реализовать такой шаблон. Комбинированные шаблоны включают в себя опыт вашего использования существующих шаблонов и обеспечивают высокий уровень абстракции для их повторного использования в комбинации. Таким образом, они могут еще больше упростить процесс разработки, основанный на использовании шаблонов.

Перед началом создания основанных на шаблонах решений вы, возможно, захотите рассмотреть уровень модульности, прежде чем решить, какие шаблоны сформировать, комбинируя существующие. Можно применить рассмотренные в данной статье действия для создания ваших собственных комбинированных шаблонов и иерархий для их повторного использования.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=5347