Использование образцов архитектуры

Идеи архитектора Кристофера Александера о том, как использовать «языки образцов

» для систематизации важных принципов и прагматик в проектировании

зданий и общин, вдохновили нескольких членов объектно-ориентируемого сообщества

на определение, сбор и проверку множества образцов программного обеспечения

[2]. «Сообщество образцов» определяет образец как «решение часто встречающейся

в проектировании проблемы». Многие из этих образцов проектирования

изложены в литературе, где образцы описываются с использованием стандартных

шаблонов документирования. Эти шаблоны дают образцу название и содержат

краткое описание проблемы, вызывающих ее причин, решение в терминах коопераций

с перечислением участвующих классов и взаимодействий объектов этих

классов. Шаблоны также содержат текст образца и примеры его использования на

нескольких языках программирования, краткое перечисление преимуществ и недостатков

образца и ссылки на похожие образцы. Согласно Александеру, это предложено

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

образцов и применяли их, чтобы делать проекты лучше и более понятными.

Такие образцы проектирования, как Фасад, Декоратор у Обозреватель, Стратегия

и Посетитель, широко известны и используются.

Сообщество образцов также применило идею образцов с немного иным шаблоном

документа для сбора стандартных решений часто встающих архитектурных

проблем. В их число входят Слои, Каналы и фильтры, Брокер, Грифельная доска.

Горизонтально-вертикальные метаданные и МУС. Другие разрабатывали образцы,

которые следует использовать в ходе анализа («образцы анализа»), в ходе реализации

(«идиомы», которые соотносят типовые объектно-ориентируемые структуры

со специфическими аспектами языков типа C++ и Smalltaek) и даже для повышения

эффективности организационных структур («организационные образцы

»). Как правило, образцы проектирования достаточно близки к объектно-ориентированным

языкам программирования. Так, примеры к ним приводятся на C++,

Java и Smalltalk. В то же время архитектурные образцы имеют дело, главным образом,

с системами или подсистемами и интерфейсами, и примеры к ним обычно не

содержат кода. Хорошая схема классификации приводится в [55].

С нашей управляемой моделями точки зрения мы определим образец как шаблон

кооперации, который представляет из себя обобщенную кооперацию и может

быть специализирован так, как определено шаблоном(приложение А). После специализации

образцы проектирования становятся кооперациями классов и вариантов

с поведением, описываемым диаграммами взаимодействия. Мы используем

шаблон кооперации, потому что предполагаем получать обобщенные решения.

Чтобы специализировать образец (например, определяя имена классов, указанных

в шаблоне, их число и т. д.), используются наследование, расширение и другие

механизмы. Во многих случаях шаблон кооперации при специализации разрас-

 

расширенного изучения образцов проектирования см. [23].

Архитектурные образцы используются таким же образом, но с упором на крупноблочные

структуры и взаимодействия подсистем и даже систем. Существует

множество образцов архитектуры. Коротко обсудим наиболее интересные из них.

Образец Брокер [12] — обобщенный механизм для управления распределенными

объектами. Он позволяет объектам вызывать другие удаленные объекты через

брокера, который передает запрос к узлу и процессу, содержащему запрашиваемый

объект. Эта передача незаметна, что означает, что вызывающему объекту нет необходимости

знать, является ли вызываемый объект удаленным. Образец Брокер

часто использует образец проектирования По доверенности, который обеспечивает

локальный прокси с такими же интерфейсами, как и у удаленного объекта,

делая стиль и детали распределенной связи незаметными.

Существуют и другие образцы, которые помогают нам понять аппаратные средства

создаваемых систем, и такие, которые помогают нам проектировать систему

поверх этих аппаратных средств. Примерами таких образцов могут быть Клиент-

серверу Трехуровневая система и Одноранговая система. Эти образцы определяют

структуру модели развертывания и рекомендуют, как следует размещать компоненты

по узлам. В подразделе «Описание архитектуры» данной главы мы рассмотрим,

как можно применить образец Клиент-сервер в АТМ-системе, описанной нами

в главе 3. В нашем примере распределение по образцу Клиент-сервер предполагает

наличие одного клиента, который выполняет весь код интерфейса пользователя

и часть кода бизнес-логики (классы управления) для каждого реального банкомата.

Узел — сервер — хранит фактические счета и бизнес-правила, по которым проверяется

каждая операция.

 

Рис. 4.5. Поуровневая архитектура организует систему в виде уровней подсистем

 

Образец Уровни применим к различным типам систем. Это — образец, который

определяет, как организовать многоуровневую модель проектирования, то есть

такую модель, в которой компоненты одного слоя могут быть связаны только

с компонентами соседних слоев. Важность этого образца в том, что он упрощает__

 

 

понимание и организацию разработки сложных систем. Образец Уровни уменьшает

число связей в системе благодаря тому, что на нижних уровнях не известны никакие

подробности или интерфейсы верхних уровней. Кроме того, он помогает нам

определить фрагменты, пригодные для повторного использования, а также обеспечивает

структуру, помогающую нам принять решение по вопросу «купить готовое

или разработать самим».

Системы с многоуровневой архитектурой содержат на верхнем уровне специфические

прикладные подсистемы. Они построены на базе подсистем более низких

уровней, таких как каркасы и библиотеки классов. Посмотрим на рис. 4.5. Общий

уровень приложений содержит подсистемы, которые не специфичны для единственного

приложения и могут многократно использоваться для множества различных

приложений в пределах той же предметной области. Архитектуру двух нижних уровней

можно определить, не вдаваясь в детальное рассмотрение вариантов использования,

потому что эти уровни не связаны с предметной спецификой приложения.

Архитектура двух верхних уровней создается на базе существенных для архитектуры

вариантов использования (эти уровни — предметно-зависимые).

Уровень (приложение В) — это набор подсистем, которые имеют одинаковую

степень общности и одинаковый уровень стабильности интерфейса: нижние уровни

будут общими для различных приложений и должны иметь более стабильные

интерфейсы, в то время как верхние уровни более предметно-зависимы и могут

иметь менее стабильные интерфейсы. Так как нижние уровни обеспечивают редко

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

стабильные нижние уровни в качестве фундамента. Подсистемы различных

уровней могут повторно использовать варианты использования, другие подсистемы

низшего уровня, классы, интерфейсы, кооперации и компоненты более

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

образцов архитектуры. Образцы структурирования модели развертывания (например,

Клиент-сервер, Трехуровневая система и Одноранговая система) можно комбинировать

с образцом Уровни, который _______помогает структурировать модель проектирования.

Образцы, относящиеся к структурам разных моделей, часто ортогональны

друг другу. Даже образцы, относящиеся к одной и той же модели, нередко прекрасно

сосуществуют. Например, образец Брокер хорошо дополняет образец Уровни,

и оба они используются в модели проектирования. Образец Брокер указывает, как

работать с распределением скрытых объектов, в то время как образец Уровни рекомендует

метод организации всего проекта. Образец Брокер, по всей вероятности,

будет реализован в виде подсистемы в среднем уровне.

Обратите внимание, что иногда один из образцов является основным. Например,

в многоуровневой системе образец Уровни может определять общую архитектуру

и распределение работ (слои создаются различными группами), в то время

как Каналы и Фильтры входят в один или более уровней. С другой стороны, в системе,

построенной на основе образца Каналов и Фильтров, общая архитектура

представляла бы собой поток между фильтрами, а уровни использовались бы только

для описания некоторых фильтров.