Отношения между структурами
Все вышеперечисленные структуры предполагают различные представления и подходы к проектированию системы; все они эффективны и полезны сами по себе. В то же время они не самостоятельны. Элементы одной структуры связаны с элементами прочих, и на эти отношения следует обратить внимание. В частности, модуль в структуре декомпозиции может декларироваться как отдельный компонент, как часть отдельного компонента или как несколько компонентов в рамках одной из структур «компонент и соединитель», отражая, таким образом, своего представителя периода прогона. Как правило, между структурами устанавливаются отношения «многие ко многим». Иногда в рамках отдельных проектов одна структура считается основной, а остальные структуры, если это возможно, определяются в ее категориях. Часто, хотя и не всегда, в качестве доминантной структуры выступает декомпозиция модулей. Объясняется это вполне разумно — декомпозиция модулей порождает структуру проекта. В главе 4 представлены сценарии, которые помогают развивать отдельные структуры и их связи с другими структурами. К примеру, если разработчик программного обеспечения желает внести в клиент-серверную структуру системы какие-то изменения, он должен учитывать представления процессов и размещения: дело в том, что клиент-серверные механизмы, как правило, задействуют процессы и потоки, а физическое распределение реализует различные механизмы управления, которые оказываются необходимы в случае локализации упомянутых процессов на одной машине. При необходимости изменения механизмов управления оценить степень их корректировки помогают представление декомпозиции модулей и многоуровневое представление. Не все системы гарантируют учет различных архитектурных структур. Чем крупнее система, тем существеннее различие между этими структурами; впрочем, если речь идет о небольшой системе, обойтись, как правило, можно минимальными средствами. Вместо нескольких структур «компонент и соединитель» хватит одной. Если процесс в системе всего один, то структуру процессов можно свести к единичному узлу, который по мере проектирования не нужно будет сопровождать. Если распределение не планируется (все операции будут производиться на одном процессоре), необходимость в структуре размещения отпадает. Структуры — это основные базовые точки конструирования архитектуры. Отдельные структуры отвечают за те или иные атрибуты качества. Они выражают принцип разделения задач при создании архитектуры (а также при ее последующем анализе и изложении для заинтересованных лиц). На материале главы 9 мы покажем, что структуры, отобранные архитектором на роль отправных точек конструирования, одновременно обеспечивают основу для документирования архитектуры. Какие структуры выбрать? Мы привели краткий обзор ряда полезных архитектурных структур, однако на самом деле их значительно больше. С какими из них архитектору имеет смысл работать? Какие архитектор должен задокументировать? Ну конечно, не все. Недостатка в советах не наблюдается. В 1995 году Филипп Крюхтен (Philippe Kruchten) [Kruchten 95] опубликовал очень важную статью, в которой понятие архитектуры описывается в категориях составляющих ее структур; в ней же он советует сосредоточиться на четырех структурах. Для того чтобы удостовериться, что структуры не конфликтуют друг с другом, а, вместе взятые, действительно описывают удовлетворяющую всем требованиям систему, Крюхтен посоветовал обратиться к основным элементам Use Case. Этот метод, получивший название «4+1», стал довольно популярен, а впоследствии выступил в роли концептуальной основы рационального унифицированного процесса (Rational Unified Process, RUP). О каких именно представлениях рассуждает Крюхтен? ♦ Логическое представление. Элементы — это «ключевые абстракции», которые в контексте объектно-ориентированной технологии декларируются в качестве объектов и классов объектов. Это — модульное представление. ♦ Процесс. Это представление связывается с параллелизмом и распределением функций. Оно тождественно представлению «компонент и соединитель». ♦ Разработка. Это представление отражает организацию программных модулей, библиотек, подсистем и единиц разработки. Речь идет о представлении распределения, которое отображает программное обеспечение на среду разработки. ♦ Физическое представление. Отображая прочие элементы на узлы обработки и связи, оно также относится к представлению распределения (которое иногда называют представлением размещения). Примерно в то же время, когда свою работу выпустил Крюхтен, другие исследователи — Сони, Норд и Хофмайстер [Soni 95] — опубликовали весьма заметную статью, в которой описывали структуры, довольно популярные среди архитекторов их компании. Речь шла о концептуальном представлении, представлениях соединения модулей и исполнения, а также о кодовом представлении. Они, опять же, точно соответствуют моделям модулей, распределения и «компоненту и соединителю». За ними последовали другие работы, и список доступных структур стал быстро расширяться. Использовать все эти структуры, конечно, не стоит, хотя, с другой стороны, они по большей части присутствуют в конструируемых системах. Не забывайте, что от архитектора, помимо прочего, требуется понимать, каким образом различные структуры обеспечивают реализацию атрибутов качества; именно из этого соответствия и следует исходить, составляя перечень подходящих структур. В главе 9, рассуждая об архитектурном представлении, мы намерены более полно раскрыть суть этого принципа. Заключение В настоящей главе мы привели определение программной архитектуры и некоторых связанных с ней понятий: эталонной модели, эталонной архитектуры и архитектурного образца. Мы объяснили, почему в контексте программной инженерии архитектура играет столь существенную роль, выявили ее функции как источника начального накопления знаний о системе, как катализатора взаимодействия между заинтересованными лицами и как повторно используемого средства. Все эти функции мы рассмотрим в последующих главах. Из нашего определения архитектуры становится совершенно понятно, что все системы состоят из множества структур. Представив некоторые наиболее распространенные структуры, мы объяснили, почему каждая из них служит своеобразной отправной точкой для всего последующего процесса проектирования. В следующей главе мы впервые в этой книге рассмотрим конкретный пример. Он демонстрирует применимость различных архитектурных структур в процессе проектирования сложной системы. Дополнительная литература Понятийные основы изучения программной архитектуры были в значительной степени заложены ранними работами Дэвида Парнаса (David Parnas) (см. врезку «Архитектурное дежа вю»). Читатели Парнаса, скорее всего, отметили бы его фундаментальную статью об информационной закрытости [Parnas 72], работы по семействам программ [Parnas 76], неотъемлемым структурам программных систем [Parnas 74] и введение в структуру использования, ориентированную на конструирование подмножеств и супермножеств систем [Parnas 79]. Все эти исследования включены в более распространенный сборник его основных работ [Hoffman 01]. Пространная документация по программно-архитектурным образцам перечислена в работах «Pattern-Oriented Software Architecture» [Buschmann 96, Schmidt 00]. Применению архитектурных представлений в промышленных проектах посвящены работы [Soni 95] и [Kruchten 95]. На основе первой из них впоследствии была выпущена книга [Hofmeister 00] со всесторонним анализом представлений и их использования в ходе разработки и анализа. На основе содержания статьи [Kruchten 95], как мы уже говорили, построен рациональный унифицированный процесс, которому посвящено огромное количество исследований. Из них мы рекомендуем [Kruchten 00]. Сведения об архитектурном несоответствии содержатся в работе авторского коллектива под руководством Гарлана [Garlan 95]. Барри Боэм (Barry Boehm) [Boehm 95] раскрывает особенности процессов, относящиеся к программной архитектуре. На веб-сайте программной архитектуры Института программной инженерии [SEI АТА] приводятся многочисленные ресурсы и ссылки на ресурсы, связанные с программной архитектурой; среди прочего на нем опубликована подборка самых разнообразных определений этого термина. Полиш (Paulish) [Paulish 02] рассматривает влияние на архитектуру финансовых и временных ограничений. Дискуссионные вопросы 1. Программная архитектура часто сравнивается с архитектурой зданий. Перечислите допустимые аспекты такого сравнения. Как здания ассоциируются со структурами и представлениями программной архитектуры? Как они соотносятся с образцами? В чем недостатки такого сопоставления? На каком этапе оно становится неприемлемым? 2. В чем разница между эталонной архитектурой и архитектурным образцом? Какие возможности в части планирования деятельности организации и архитектурного анализа предусматривает одно из этих понятий и не предусматривает другое?
|