Другие взгляды на архитектуру
Программная архитектура как дисциплина стремительно развивается, но все же она еще молода; поэтому какого-то универсального, повсеместно принятого ее определения не существует. Но и недостатка в вариантах определений не наблюдается. Большинство из них, как правило, сходятся в том, что любая архитектура состоит из структур, элементов и связей между ними; то, что они не взаимозаменяемы, объясняется расхождениями в деталях. Программная архитектура изучается путем фиксации применяемых проектировщиками принципов конструирования и действий, которые они используют в процессе работы с реальными системами. Таким образом, предпринимается попытка выделить универсальные черты системного проектирования; в этом качестве программная архитектура имеет дело с самыми разными операциями, понятиями, методами, подходами и результатами. Именно поэтому в сообществе специалистов по программной инженерии распространены некоторые другие, отличные от приведенного выше, определения программной архитектуры; поскольку какие-то из них вам наверняка встретятся, вы должны понимать, что они подразумевают, и знать, на основе каких аргументов в том или ином случае можно построить дискуссию. Отдельные, наиболее ходовые определения приводятся ниже. ♦ Архитектура — это проект, поднятый на высокий уровень. Действительно, лошадь относится к млекопитающим, однако они не равнозначны. В процессе проектирования решаются разные задачи, в том числе и неархитектурные — взять хоть вопрос об инкапсуляции значимых структур данных. Интерфейсы этих структур, без сомнения, относятся к архитектуре, но собственно их отбор — нет. ♦ Архитектура — это общая структура системы. Согласно распространенному (но неверному) мнению, у любой системы одна структура. Мы-то знаем, что это не так, а если кто-то вознамерится утверждать обратное, спросите его, какую конкретно структуру он имеет в виду. Эффект будет не только педагогическим. Как мы увидим впоследствии, наполнение системы атрибутами качества, которые в конечном итоге определяют ее успех или провал, происходит именно через разнообразные структуры. Множественность структур в рамках архитектуры составляет суть самого этого понятия. ♦ Архитектура - это структура компонентов программы или системы, взаимосвязи, а также принципы и нормы их проектирования и развития во времени. Это одно из ряда процессно-ориентированных определений, включающих дополнительные сведения о принципах и нормах. Многие считают, что в состав архитектуры входят декларация потребностей заинтересованных лиц и логическое обоснование, регламентирующее реализацию их требований. Действительно, сбор такой информации важен и необходим с точки зрения профессионализма. Однако мы не считаем, что эти документы являются частью архитектуры, — никто ведь не берется утверждать, что руководство пользователя автомобиля входит в состав автомобиля. Архитектуру, к какой бы системе она ни относилась, можно исследовать и проанализировать, не располагая знаниями о процессах ее проектирования и развития. ♦ Архитектура — это компоненты и соединители. Под соединителями имеется в виду механизм периода прогона, предназначенный для передачи в рамках системы сигналов управления и данных. Следовательно, данное определение ориентировано на архитектурные структуры периода прогона. К примеру, соединителем является UNIX-канал. Согласно этой логике, все архитектурные структуры, которые не относятся к периоду прогона (например, рассмотренное выше статическое разделение на ответственные блоки реализации), признаются второстепенными. В то же время в контексте решения системных задач они не менее важны, чем структуры периода прогона. Рассуждая об «отношениях» между элементами, мы имеем в виду все отношения - те, что реализуются в период прогона, и те, что к нему не относятся.
Все дискуссии по поводу программной архитектуры крутятся вокруг структурности систем. Иногда словом «архитектура» обозначают конкретный архитектурный образец (например, клиент-сервер), в других случаях — область исследований (например, книгу об архитектуре), однако в большинстве случаев под «архитектурой» имеют в виду структурные аспекты конкретной системы. Именно их мы пытались отразить в своем варианте определения. Архитектурные образцы, эталонные модели и эталонные варианты архитектуры В промежутке между схемами из прямоугольников и линий — простейшими «набросками» архитектур — и комплексными архитектурами, укомплектованными всей необходимой информацией о системах, существуют многочисленные переходные этапы. Каждый такой этап есть результат принятия ряда архитектурных решений, совокупность архитектурных альтернатив. Некоторые из них сами по себе имеют определенную ценность. Прежде чем переходить к анализу архитектурных структур, мы рассмотрим три промежуточных этапа. 1. Архитектурный образец — это описание типов элементов и отношений и изложение ряда ограничений на их использование. Образец имеет смысл рассматривать как совокупность ограничений, накладываемых на архитектуру, — конкретнее, на типы элементов и образцы их взаимодействия; на основе этих ограничений складывается ряд или семейство соответствующих им вариантов архитектуры. К примеру, одним из общеупотребительных архитектурных образцов является «клиент-сервер». Клиент и сервер — это два типа элементов; их взаимодействие описывается посредством протокола, при помощи которого сервер взаимодействует со всеми своими клиентами. Термин «клиент-сервер» по смыслу лишь предполагает множественность клиентов; конкретные клиенты не перечисляются, и речи о том, какая функциональность, помимо реализации протоколов, характерна для клиентов или для сервера, не идет. Согласно этому (неформальному) определению, образцу «клиент-сервер» соответствует бесчисленное количество различных вариантов архитектуры, причем все они чем-то отличаются друг от друга. Несмотря на то что архитектурный образец не является архитектурой, он все же содержит весьма полезный образ системы — он накладывает на архитектуру, а следовательно, и на систему, полезные ограничения. У образцов есть один крайне полезный аспект — дело в том, что они демонстрируют известные атрибуты качества. Именно поэтому архитекторы выбирают образцы не наугад, а исходя из определенных соображений. Некоторые образцы содержат известные решения проблем, связанных с производительностью, другие предназначаются для систем с высокими требованиями к безопасности, третьи успешно реализуются в системах с высокой готовностью. Во многих случаях выбор архитектурного образца оказывается первым существенным решением архитектора. Синонимичным «архитектурному образцу» является общеупотребительный термин архитектурный стиль (architectural style). 2. Эталонная модель — это разделение между отдельными блоками функциональных возможностей и потоков данных. Эталонной моделью называется стандартная декомпозиция известной проблемы на части, которые, взаимодействуя, способны ее разрешить. Поскольку эталонные модели имеют происхождение в опыте, их наличие характерно только для сформировавшихся предметных областей. Вы можете назвать стандартные элементы компилятора или системы управления базами данных? А в общих словах объяснить, как эти элементы сообща решают свою общую задачу? Если можете, значит, вы знакомы с эталонной моделью этих приложений. 3. Эталонная архитектура — это эталонная модель, отображенная на программные элементы (которые сообща реализуют функциональность, определенную в эталонной модели), и потоки данных между ними. В то время как эталонная модель обеспечивает разделение функций, эталонная архитектура отображает эти функции на декомпозицию системы. Соответствие может быть как однозначным, так и не однозначным. В программном элементе может быть реализована как отдельная часть функции, так и несколько функций сразу. Эталонные модели, архитектурные образцы и эталонные архитектуры не являются вариантами архитектуры; это не более чем полезные понятия, способствующие фиксации отдельных элементов архитектуры. Каждый из них появляется как результат проектных решений, принимаемых на самых ранних этапах. Отношение между этими проектными элементами представлено на рис. 2.2. Рис. 2.2. Отношения между эталонными моделями, архитектурными образцами, вариантами эталонной и программной архитектуры. (С помощью стрелок мы указываем на то, что последующие понятия содержат большее количество проектных элементов.) Аналогии архитектуры с другими значениями этого слова проводятся весьма часто. Как правило, архитектура ассоциируется с физической структурой (здания, улицы, аппаратура) и физическим расположением. Архитектор, разрабатывающий план здания, имеет целью обеспечить его доступность, эстетическую привлекательность, освещенность, эксплуатационную надежность и др. Программный архитектор в процессе проектирования системы должен стремиться к обеспечению таких характеристик, как параллелизм, модифицируемость, практичность, безопасность и т. д.; кроме того, он призван установить баланс между требованиями к этим характеристикам. Аналогии между зданиями и программными системами не очень надежны, они слишком быстро оказываются несостоятельными. Хороши они тем, что помогают осознать важность позиции наблюдателя и прийти к выводу о множественности значений понятия «структура» в зависимости от мотивов ее изучения. Точное определение программной архитектуры значительно менее существенно, чем анализ сущности этого понятия. 2.4. Почему программная архитектура так важна? В главе 1 мы в основном аргументировали значимость архитектуры для корпорации. В этой главе мы поговорим о том, почему архитектура так важна с технической точки зрения. В этом контексте следует привести три основных фактора. 1. Взаимодействие между заинтересованными лицами. Программная архитектура — это универсальная абстракция системы, на основе которой все или почти все заинтересованные в системе лица могут искать взаимопонимания, вести переговоры, находить компромиссы и просто общаться. 2. Начальные проектные решения. Программная архитектура содержит сведения о том, какие решения были приняты на ранних этапах разработки системы. Значимость подобного рода сводок отнюдь не ограничивается удельным весом этих этапов относительно оставшихся операций разработки, размещения и сопровождения. Именно в это время впервые появляется возможность анализа проектных решений, определяющих дальнейшую разработку системы. 3. Переносимая абстракция системы. Программная архитектура — это относительно небольшая, вполне доступная для человеческого восприятия модель структурирования системы и взаимодействия ее компонентов; помимо прочего, эта модель обладает свойством переносимости из системы в систему. Например, ее можно применить в отношении других систем, для которых характерны примерно те же требования к атрибутам качества и функциональным возможностям, и тем самым дать начало полноценному многократному применению. Каждый из этих вопросов мы обсудим отдельно.
|