Использование принципов управляемой моделями разработки и проектирования на базе шаблонов при проектировании SOA: Часть 2. Проектирование с применением шаблоновИсточник: IBM Rational Ли Акерман, Бертран Портье
ВведениеВ серии статей "Design SOA Services with Rational Software Architect" (Проектирование SOA-сервисов при помощи Rational Software Architect) (см. раздел Ресурсы), мы рассказывали о том, как можно использовать модели для документирования проектов SOA-решений. У нас была возможность работать на нескольких разных уровнях абстракции, использовать существующие UML-профили, шаблоны моделей, UML-шаблоны и преобразования. Эти артефакты помогли нам спроектировать и сгенерировать необходимые артефакты с необходимой степенью детализации. Однако нас интересовал следующий вопрос, на который мы не ответили: "Как можно использовать тот же тип поддержки и автоматизации, но в сочетании со своими передовыми методами?" В части 1 данной серии мы рассмотрели два вида артефактов, поддерживаемых Rational Software Architect, а именно: UML-профили и шаблоны моделей. Мы узнали, что представляют собой эти артефакты и как можно создать их пользовательскую реализацию. Теперь вы должны научиться создавать пользовательские профили и шаблоны моделей. В данном учебном руководстве мы продемонстрируем, как IBM Rational Software Architect может обеспечить поддержку принципов проектирования с применением шаблонов (patterns-based engineering, PBE) для разработки программного обеспечения. В технологии PBE мы используем различные типы артефактов, в том числе:
По мере изучения этого и последующих учебных руководств нашей серии каждый из упомянутых артефактов будет рассматриваться с возрастающей детализацией. На протяжении всей серии мы будем изучать, что представляют собой эти артефакты, как можно их создать и, самое важное, использовать их в сочетании с другими артефактами. Прежде чем углубиться в детали артефактов, важно, чтобы вы хорошо понимали соответствующую терминологию. Терминология проектирования с применением шаблоновНам уже встречалось определение шаблона как "проверенного решения известной проблемы в данном контексте". В этом простом определении отразились основные моменты, на которых обязательно нужно остановиться: Проверенное решение: шаблон предназначен для фиксации передового метода. С традиционной точки зрения это определение означает, что решение работает. Вряд ли имеет смысл тратить время и усилия на шаблон, который не работает. Известная проблема: Чтобы лучше понять решение, необходимо понять и проблему, для решения которой оно предназначается. Если вы не понимаете проблему, то можете попытаться применить шаблон к проблеме, для которой он не подходит. В данном контексте: Это проверенное, использующее передовые методы решение применяется к проблеме только в конкретной ситуации. Если мы попытаемся использовать шаблон в любых ситуациях, мы обнаружим, что не всегда получим желаемый результат. Необходимо внимательно подойти к выбору шаблона и убедиться в том, что он является подходящим в данном контексте. В случаях несоответствия между шаблоном и контекстом, в котором этот шаблон применяется, мы можем столкнуться даже с отрицательным влиянием на решение. С учетом всего этого необходимо провести различие между спецификацией и реализацией шаблона . Спецификация шаблона представляет собой формальное письменное описание шаблона в книгах и документации. Спецификация - это именно то, что мы традиционно подразумеваем под шаблоном; она включает следующую информацию:
Многие годы именно этот способ был основным способом использования шаблонов. Мы писали спецификации, предоставляли их в совместное использование и следовали этим спецификациям при создании решений. Шаблоны позволяли нам осваивать передовые методы, многократно использовать идеи и более эффективно взаимодействовать с другими разработчиками. Однако выигрыш в производительности труда был ограничен, потому что когда доходило до создания решения на основе спецификации шаблона, пользователям нужно было изучить спецификацию, интерпретировать ее, и только после этого можно было приступать к созданию элементов. Как и в большинстве ситуаций, когда людям приходится заниматься изучением, интерпретацией и реализацией вручную, каждый сотрудник создавал немного отличающееся решение. Таким образом, по одному и тому же шаблону могли быть созданы немного разные решения, хотя все они были основаны на одной спецификации. Кроме того, при каждом применении шаблона нужно было вручную повторять описанные шаги. Реализация шаблона - это артефакт, который автоматизирует применение шаблона в конкретной среде. Такой артефакт допускает многократное использование; к нему легко организовать общий доступ. Шаблоны превращаются в конкретные артефакты в среде разработки. В Rational Software Architect сторонами реализации шаблонов являются:
Имея реализацию шаблона, мы можем устранить некоторые слабые места, которые обнаружились у спецификаций шаблонов. При условии корректной входной информации реализация шаблона будет генерировать одинаковый выход независимо от того, кто использует данный шаблон. Кроме того, если окажется, что данный шаблон необходимо применить несколько раз, это легко осуществить. Имейте в виду, что наличие реализации не отменяет необходимости в спецификации. Не исключены ситуации, когда на основе одной спецификации шаблона может быть создано любое число реализаций - от нуля и более. Однако мы не должны сталкиваться с ситуациями отсутствия спецификации шаблона при наличии его реализации. Преимущества реализаций шаблона Использование принципов проектирования с применением шаблонов при разработке обеспечивает следующие преимущества. Сколько раз в процессе работы над проектом вы думали: "Я уже решил эту проблему. Почему мне приходится снова и снова повторять это решение?" Самая трудная, интересная и творческая часть работ уходит на решение исходной проблемы. После того как проблема решена, нам нужно использовать найденное решение и применять его многократно - быстро и последовательно. Кроме того, нам нужно сделать наше решение доступным другим специалистам, чтобы они тоже могли получить выигрыш от его использования. С течением времени мы поняли, что автоматизированные процедуры могут воссоздавать экземпляры решений значительно быстрее, чем люди. В этом, вероятно, нет ничего необычного, потому что мы всегда предполагаем, что автоматизированная процедура выполняется быстрее, чем те же действия, выполняемые вручную. Следовательно, мы можем повысить производительность просто за счет автоматизации применения нашего решения. Один из интересных моментов, связанных с реализациями шаблонов, заключается в том, что они поддерживают и автоматизируют использование точек изменения. Точки изменения позволяют настраивать работу шаблона, адаптируя генерируемый им вывод к решению специфической конкретной задачи. Раньше нам пришлось выполнять копирование и вставку кода реализации, а затем изменять этот код там, где это необходимо. Теперь мы анализируем решение при создании реализации шаблона, чтобы в процессе применения шаблона оно настраивалось бы с учетом информации, предоставляемой пользователем. Такая возможность регулировки и настройки шаблона без лишних сложностей и с предсказуемыми результатами дает нам дополнительный выигрыш в производительности. В завершение скажем еще об одном немаловажном аспекте: использование реализаций шаблонов позволяет всему коллективу автоматизировать использование и внедрение передовых методов. В зависимости от своей квалификации и опыта член коллектива может использовать опыт специалистов и проверенные решения. Членам коллектива разработчиков нет необходимости вникать во все нюансы создания оригинального решения или шаблона, который теперь представляет это решение. Совершенствование архитектурной основы Совершенствование архитектурных решений и архитектурного стиля - непростая задача, потому что нам приходится сталкиваться с проблемами, связанными с территориально рассредоточенной разработкой, узкой специализацией и различиями в уровне квалификаций специалистов в коллективе. Независимо от того, работают ли наши коллеги в одном здании, на другом конце города или разбросаны по всему миру, в любом случае непросто обеспечить, чтобы все они имели одно и то же видение проблемы и работали в одном направлении. Возникающие проблемы связаны, среди прочего, с различиями временных зон, языков, культурного уровня и уровня квалификации сотрудников. Письменная документация, слайдовые презентации и инструкции в виде картинок мало помогают в решении этих проблем. Реализации шаблонов дают нам возможность делиться передовыми методами, решениями и проектными решениями. Кроме того, мы можем использовать реализации шаблонов для того, чтобы генерировать большую часть наших решений, тем самым локализуя и ограничивая необходимость участия других членов коллектива в создании решения. Если речь идет об узкой специализации, мы видим, что мы должны принять промежуточные продукты от других членов коллектива, а затем, после того, как мы выполним свою часть работы, передать их вместе с нашими дополнениями другим специалистам. Реализации шаблонов помогают четко указать, где начинать и где заканчивать работу конкретному коллективу или сотруднику. Точки изменения кодифицируются и доводятся до сведения пользователей, как и предполагаемые результаты использования ресурсов. В результате мы получаем четкое и автоматизированное соглашение по перемещению продуктов по производственной линии. Реализации шаблонов помогают также обеспечить трассируемость, или возможность обратной трассировки всего написанного кода к требованиям. При использовании Rational Software Architect мы можем использовать и его интеграцию с IBM® Rational® RequisitePro® и IBM® WebSphere® Business Modeler для создания соединений между такими элементами моделей, как прецеденты, и требованиями, указанными бизнес-владельцами. Затем, в процессе работы на разных уровнях абстракции, охватывающих и модели, и код, мы можем добавить дополнительные ассоциации, показывающие отношения между элементами в проекте и требованиями. Реализации шаблонов могут использоваться для автоматизации создания трассировочных ссылок по мере создания элементов решения. Благодаря поддержке трассируемости мы можем ответить на следующие вопросы: "В чем заключается результат изменений?" и "Почему данное решение настроено именно так?" Производительность и архитектурное воплощение ничего не значат, если окончательное решение имеет низкое качество. По определению, шаблоны реализации создаются на основе передовых методов. По существу, применяя шаблон, мы уже делаем шаг в направлении повышения качества. Нам все еще нужно руководствоваться мнением специалистов при выборе шаблонов, потому что важную роль играет контекст применения, но мы можем использовать в качестве путеводителя спецификацию и прочую документацию, имеющую отношение к реализации шаблона. Как уже говорилось ранее, мы также выиграем, если будем лучше использовать экспертные знания специалистов коллектива. Специалисты могут создавать автоматизированные процедуры, способные реплицировать их решения, основанные на передовых методах. Таким образом, вместо того, чтобы повторять свою работу по созданию одного и того же решения, специалисты могут создать автоматизированную процедуру, а затем перейти к решению следующей проблемы, требующей их внимания. И наконец, еще один важный момент: если в процессе создания реализации шаблона произойдет какой-либо сбой, мы можем исправить ошибку, а затем создать репликацию нового и усовершенствованного решения, просто еще раз применив шаблон. Напротив, если мы реализовали шаблон вручную на основе спецификации, нам придется изменить каждый экземпляр кода, в который встроено наше решение. Такая ручная работа потребовала бы много времени и могла бы привести к возникновению новых элементов человеческих ошибок в будущем решении. Существует много других способов продолжить рассмотрение преимуществ использования реализаций шаблонов. Но давайте лучше подведем итоги, выделив несколько основных моментов. Реализации шаблонов - это технология, которую нужно иметь в виду в следующих ситуациях:
Поддержка инструментов и артефактов Виды элементов, обеспечивающих совершенствование При создании решений на базе шаблонов можно использовать ряд элементов в различных сочетаниях, чтобы получить дополнительные преимущества. Эти элементы можно разбить на три основные группы (рисунок 1):
Мы уже говорили об элементах из первых двух категорий, поэтому давайте сразу перейдем к третьей категории. Возможность добиться понимания пользователями процедуры применения генерируемых ресурсов, автоматизирующих разработку в соответствии с передовыми методами, не менее важна, чем возможность создавать такие ресурсы. В этом отношении вы должны найти эффективные способы информировать пользователей о том, как использовать ресурсы. Для этого можно использовать два варианта:
Способы использования комбинации элементов Теперь вы имеете базовое представление о том, что представляют собой все эти элементы и какие роли им отведены; давайте рассмотрим, как можно использовать их в различных сочетаниях (рисунок 2). Рисунок 2. Комбинирование элементов По этой схеме действия выполняются слева направо, начиная с создания модели ввода для решения. В модели ввода собирается информация, которая является уникальной для решаемой задачи. Не стоит начинать с пустой модели; выберите шаблон, который поможет вам структурировать модель и понять, какие элементы понадобятся для модели. Совет: В процедуре применения UML-шаблона могут использоваться профили, примененные к модели, а также знания шаблона модели. Когда вам понадобится перейти на следующий уровень абстракции, можно воспользоваться преобразованием для автоматизации этой процедуры. Преобразование интерпретирует элементы в исходной модели, а затем, при помощи серии правил, преобразует элементы модели в элементы, характерные для следующего уровня абстракции. Выполняя переходы между уровнями абстракции, можно двигаться либо от более абстрактного к более конкретному уровню, либо от более конкретного к более абстрактному. Независимо от выбранного направления важно иметь в виду, что часто прямых и полных отображений между элементами на различных уровнях абстракции не существует. При переходе от более абстрактного к более конкретному уровню иногда происходит ветвление элементов. Это означает, что одному элементу более высокоуровневой модели соответствует более одного элемента в низкоуровневой модели. Основываясь на нашем опыте создания решений шаблонов, мы приводим здесь несколько соображений, которые следует иметь в виду:
Не забывайте об этих моментах, изучая данную серию учебных руководств. Вам нужно создавать не просто реализации шаблонов, а высококачественные шаблоны, которые люди будут использовать. Если качество шаблона недостаточно, или ресурс сложно использовать, время будет потрачено зря. UML-шаблоныUML-шаблон применяется в самой модели, благодаря чему можно использовать передовые методы для создания элементов в модели и определения деталей. Как уже говорилось в предыдущем разделе, UML-шаблоны часто используются в сочетании с UML-профилем для добавления разметки к элементам модели. С их помощью можно также добавлять в модель элементы или изменять различные аспекты существующих элементов. Главное, что следует иметь в виду - это то, что UML-шаблон работает в модели, а преобразование выполняется между моделями. По умолчанию в Rational Software Architect включено несколько UML-шаблонов, созданных на базе шаблонов проектирования Gang of Four (GoF). Работать с этими шаблонами и любыми другими шаблонами, которые вы установите, можно из панели обозревателя шаблона Pattern Explorer (рисунок 3). Примечание: Создаем пользовательский UML-шаблон В этом разделе мы создадим простой пользовательский UML-шаблон в предметной области SOA. В курсе DEV498 "Pattern Implementation Workshop with IBM Rational Software Architect" (Семинар по реализации шаблонов при помощи Rational Software Architect) даны более подробные рекомендации по этому процессу (см. раздел Ресурсы). Поразмыслив, вы обнаружите, что в одном проекте (или в нескольких проектах) появляются периодически повторяющиеся решения. Нам нужно найти повторяющееся решение и начать анализ шаблона посредством идентификации ролей, определенных в шаблоне, их разнообразия, зависимостей между ними, когда следует использовать решение, каковы последствия использования решения и так далее. Анализ экземпляра - испытанная методика выполнения этого анализа. Более подробно анализ экземпляра мы рассмотрим в одном из следующих выпусков нашей серии. По завершении анализа экземпляра мы определим роли, участвующие в шаблоне, их атрибуты, производные атрибуты и модель ввода и приступим к созданию спецификации и реализации шаблона. В данном учебном руководстве UML-шаблон реализует шаблон "Service Provider" . В таблице 1 представлена спецификация этого шаблона. Таблица 1. Спецификация шаблона "Service Provider"
Запись реализации шаблона В Rational Software Architect UML-шаблон представляет собой подключаемый модуль на базе Eclipse, который использует несколько специализированных API, в том числе API для шаблонов, UML 2 API, EMF API, и т. д. Чтобы приступить к созданию шаблона, выполните следующие шаги:
Рисунок 5. Шаблон Plug-in with Patterns С этого момента Rational Software Architect начинает заполнять новый проект подключаемого модуля, который пока содержит пустой шаблон библиотеки шаблонов Pattern Library. Если вы находитесь не в перспективе Plug-in Development Environment, Rational Software Architect предложит переключиться в эту перспективу. Кроме того, в перспективу будет добавлено представление Pattern Authoring, показанное на рисунке 6. Рисунок 6. Представление Pattern Authoring
Рисунок 7. Представление Package Explorer Теперь у нас есть пустая библиотека шаблонов, и мы можем добавить в эту библиотеку один или более шаблонов. Для добавления шаблонов в библиотеку используется следующая последовательность действий:
Совет:
Рисунок 8. Добавление параметра в шаблон
Рисунок 9. Определение параметра При помощи описанных выше шагов мы определили, что наш шаблон будет иметь параметр с именем Service Provider Name, типом Literal String и кратностью 1 (один).
Рисунок 10. Добавление еще одного параметра На этом работа с параметром еще не закончена. В этом шаблоне существует зависимость между двумя параметрами. То есть, прежде чем шаблон сможет выполнить ожидаемое от него поведение (например, обновить или добавить элементы модели), ему понадобится информация из другого параметра. По сути, вам нужно указать детали для поддержки данной зависимости.
Рисунок 11. Вкладка Pattern Dependency
Совет:
Рисунок 12. Пользовательская настройка групп шаблонов Rational Software Architect добавляет в проект классы. После этого в представлении Pattern Authoring (рисунок 13) мы увидим, что библиотека содержит шаблон. Рисунок 13. Библиотека шаблонов в представлении Pattern Authoring Определив базовую структуру шаблона, можно приступить к определению поведения, ассоциируемого с данным шаблоном. В представлении Package Explorer мы увидим, что в проект был добавлен новый класс Рисунок 14. Класс Обратите внимание на то, что в классе шаблона
Вспомните: мы определили, что между этими двумя параметрами существует отношение зависимости. Для поддержки этой зависимости в класс ServiceSpecification был добавлен внутренний класс
Figure 15. Справочная система (Help) Как уже говорилось ранее, для поставщика сервисов нам нужно создать UML-компонент и UML-порты, которыми он владеет, с учетом параметров, указанных пользователем (имя и набор интерфейсов). Чтобы это могло осуществиться, необходимо написать код для метода
Прочитайте код и комментарии к нему, чтобы проследить, как мы использовали API UML2 для уточнения модели. Совет:
Совет:
Чтобы протестировать шаблон, необходимо развернуть его на экземпляре Rational Software Architect. Среда разработки подключаемых модулей поддерживает этот вид задач, позволяя запустить еще один экземпляр, который называется инструментальная среда исполнения (runtime workbench). В инструментальной среде исполнения вы будете взаимодействовать с шаблоном так, как это делал бы конечный пользователь. В процессе выполнения шаблона можно устанавливать контрольные точки, перемещаться по коду и обновлять его, в общем, работать с ним так же, как с любым другим подключаемым модулем на базе Eclipse.
Совет: Рисунок 16. Запуск приложения Eclipse в режиме отладки После этого запустится второй экземпляр Rational Software Architect. В экземпляре рабочего цикла инструментальной среды исполнения создайте новый UML-проект, а затем добавьте новую UML-модель, которая будет использовать шаблон Blank Model:
После этого вы должны оказаться в перспективе Modeling. Мы создали новый UML-проект, содержащий UML-модель, которая будет использована для тестирования шаблона.
Рисунок 17. Представление Pattern Explorer
Рисунок 18. Шаблон Service Provider
Рисунок 19. Перетаскивание шаблона в область диаграммы Main В модели создается новый экземпляр шаблона Service Provider. Обратите внимание, что экземпляр шаблона представлен в виде кооперации с ключевым словом <<Pattern Instance>>. Тестируем шаблон Service Provider Теперь можно перейти к тестированию шаблона Service Provider.
Эти интерфейсы мы используем для привязки параметра шаблона Service Specifications.
Рисунок 20. Открываем вторую пиктограмму на панели действий
Рисунок 21. Привязка первого параметра
Рисунок 22. Перетаскивание интерфейса AccountVerification на параметр Service Specifications Именно в этом момент выполняется код, который мы написали для метода ServiceProvider::ServiceSpecifications::update(PatternParameterValue, PatternParameterValue). Этот код создает UML-компонент с именем SalesMgr и стереотип <<serviceProvider>>. В компоненте также должны быть созданы UML-порт AccountVerification, типизированный при помощи интерфейса AccountVerification и стереотипизированный при помощи стереотипа <<service>> . Кроме того, стереотип <<serviceSpecification>> должен быть применен и к интерфейсу AccountVerification (рисунок 23). Рисунок 23. Результаты в представлении Project Explorer
Рисунок 24. Результаты привязки экземпляра шаблона в модели
Рисунок 25. Диаграмма поставщика сервисов SalesMgr Обратите внимание, например, на два UML-интерфейса (спецификации сервисов) в отделе интерфейсов, предоставляемых компонентом SalesMgr (поставщиком сервисов).
Рисунок 26. Внешнее представление компонента SalesMgr В компоненте (поставщик сервиса), два квадрата представляют его порты (сервисы), а кружки с линией обозначают предоставляемые интерфейсы (спецификации сервисов) для портов. На этом тестирование реализации шаблона закончено. Можно сохранить нашу модель и закрыть инструментальную среду исполнения. Закончив тестирование ресурса, можно создать спецификацию RAS (Reusable Asset Specification) для многократного использования данного ресурса. О создании пакета из ресурса мы поговорим в одном из следующих выпусков данной серии. Когда и зачем следует использовать шаблоныВ нашем учебном руководстве мы объяснили терминологию проектирования с использованием шаблона, а затем остановились на одном из типов реализаций шаблонов, так называемых UML-шаблонах. Важно не забывать о том, что UML- шаблоны, которые мы создаем, не ограничены конкретным типом модели. Вы можете создавать и применять UML-шаблоны на протяжении всего периода моделирования, потому что их можно использовать на всех уровнях абстракции. Выполнив поиск по книгам вашего любимого книжного интернет-магазина или по ресурсам технических Web-сайтов, вы можете найти различные типы шаблонов. Для SOA-решений можно применять UML-шаблоны при необходимости выполнения любой из следующих задач:
Это может быть особенно эффективным в том случае, если вам нужно применить передовые методы в проекте SOA. Можно использовать передовые методы, разработанные где угодно, а также методы, используемые в вашей организации. Автоматизированные процедуры использования передовых методов позволят вам повысить производительность, архитектурную целостность и качество создаваемых решений. Кроме того, мы предполагаем, что вы поймете, что ключевым шагом в этом процессе является идентификация и создание спецификации передового метода. Автоматизация и создание кода - самая легкая часть работы. Ценность шаблонов заключается в том, что вы перенимаете знания, опыт и передовые методы и используете их в своем коллективе. Хотя это возможно и при использовании только спецификации шаблона, вы поймете, что гораздо сложнее добиться от коллектива того же уровня производительности, качества и приверженности к архитектурному видению без поддержки автоматизированных процедур. В части 3 и 4 данной серии учебных руководств мы расскажем о том, как можно создавать преобразования для поддержки переходов между уровнями абстракции , а также о том, как можно комплектовать пакеты ресурсов для поддержки многократного использования. |