Архитектурное решение
Представление процессов: удовлетворение требований по распределению и средства расширения линейки продуктов Многоуровневое представление Представление декомпозиции на модули: системные функции Применение архитектуры SS2000 Заключение Дополнительная литература Дискуссионные вопросы
Глава 16. J2EE/EJB. Конкретный пример стандартной вычислительной инфраструктуры Связь с архитектурно-экономическимциклом Требования и атрибуты качества Всемирная паутина и J2EE Архитектурное решение Архитектурная методика EJB EJB-программирование Дескрипторы размещения Решения по размещению системы Управление состоянием — старая проблема в новом контексте Проблемы распределения и масштабирования Организация пула ресурсов Зависимость от производительности виртуальной машины Java Заключение Дополнительная литература Дискуссионные вопросы
Глава 17. Архитектура Luther. Конкретный пример мобильных приложений на основе архитектуры J2EE Связь с архитектурно-экономическимциклом Факторы влияния на архитектуру Влияние архитектуры на компанию Требования и атрибуты качества Архитектурное решение Пользовательский интерфейс Приложения Компоненты Пример повторно используемого компонента: компонент Следствия применения J2EE Механизм реализации атрибутов качества в архитектуре Luther Заключение Дополнительная литература Дискуссионные вопросы Глава 18. Конструирование систем из коробочных компонентов Воздействие компонентов наархитектуру Архитектурное несоответствие Методики исправления интерфейсных несоответствий Методики обнаружения интерфейсных несоответствий Методики предотвращения интерфейсных несоответствий Компонентное проектирование как поиск Пример приложения ASEILM Ансамбль Miva Empressa Ансамбль Java-сервлетов Заключение Дополнительная литература Глава 19. Будущее программной архитектуры Снова архитектурно-экономическийцикл Создание архитектуры Архитектура в рамках жизненногоцикла Влияние коммерческих компонентов Заключение Сокращения Библиография Алфавитный указатель
Предисловие Программная архитектура как область исследований весьма значительна; разговоров о ней с каждым днем ведется все больше. Тем не менее, насколько мы знаем, ощущается дефицит технических и административных руководств по управлению архитектурой программных систем в компаниях, занимающихся их разработкой. Своим появлением книга обязана нашему убеждению в недостаточной изученности программной архитектуры в коммерческом и организационном аспектах. Накопленный опыт проектирования и анализа крупных и сложных, преимущественно программных, систем привел нас к выводу о том, что, в конечном итоге, конструкцию системы, ее успех или провал обусловливают коммерция и организация. Системы конструируются согласно реальным (или предполагаемым, как это происходит в случае с готовыми продуктами) требованиям компаний. Именно они определяют такие характеристики системы, как производительность, готовность, защита, совместимость с другими системами, а также способность приспосабливаться к разного рода изменениям в течение своей жизни. Желание удовлетворить эти цели за счет соответствующих свойств программного продукта навязывает программным архитекторам определенные конструктивные решения. Переплетение программной архитектуры с коммерческим контекстом мы намерены проиллюстрировать конкретными примерами, взятыми из реальных систем. В частности, мы приведем следующие ситуации: ♦ Желание наладить внутри компании быстрый и беспрепятственный обмен документами, сведя централизованное управление к минимуму, привело к внедрению программной архитектуры Всемирной паутины. ♦ Высочайшие требования по безопасности при управлении воздушным движением привели одну из компаний к осознанию необходимости построения системы с архитектурой, ориентированной на достижение сверхготовности. ♦ Распределение подсистем пилотажного тренажера среди удаленных разработчиков обусловило создание архитектуры, ориентированной на постепенную интеграцию этих подсистем. ♦ Потребность в организации одновременных поставок многочисленных продуктов побудила (скорее даже заставила) одну из компаний внедрить архитектуру, позволившую структурировать ряд сложных, связанных между собой программных систем в виде единой линейки продуктов. ♦ Необходимость в стандартизации архитектурных методик, применяемых в различных организациях, с одной стороны, и признанных сообществом в целом — с другой, определила появление таких инфраструктур, как J2EE и EJB. Эти примеры, равно как и многие другие, заставляют сделать вывод о том, что конкретные программные архитектуры определяются требованиями организаций, их бизнес-моделями, опытом архитекторов и современными тенденциями в проектировании. С другой стороны, все вышеперечисленные факторы иногда испытывают обратное влияние программных архитектур, и мы намерены показать, как это происходит. Если отдельный продукт или набор продуктов оказывается успешным, то другие продукты начинают строиться по его образу и подобию. Эта мысль прекрасно иллюстрируется конкретным примером программного обеспечения, на котором основывается Всемирная паутина. До ее появления сетевым технологиям и доступности данных уделялось значительно меньше внимания, а вопросы защиты информации беспокоили лишь отдельные организации — в основном финансовые институты и правительственные учреждения. Читателями настоящей книги мы мыслим специалистов в области разработки программного обеспечения — людей, занимающихся проектированием и реализацией крупных, преимущественно программных, систем, и тех, кто управляет их деятельностью, а также студентов, которые в один прекрасный день надеются стать такими специалистами. По нашему мнению, во всем, что касается качества, сроков и стоимости, программная архитектура предоставляет максимальную отдачу на вложенный капитал. Архитектура появляется на ранней стадии жизненного цикла продукта, и от ее качества зависит результат всех последующих этапов: разработки системы, интеграции, тестирования и модификации. Непродуманная архитектура дискредитирует сам остов системы; мелких исправлений в такой ситуации недостаточно — приходится все переделывать. В сравнении с другими операциями разработки анализ архитектуры довольно дешев. Итак, эффективность вложений в разработку архитектуры обусловливается, во-первых, существенными нисходящими последствиями принятия архитектурных решений, а во-вторых, относительной экономичностью проверки и наладки архитектуры. Кроме того, нам кажется, что наилучшие возможности по многократному применению появляются именно в архитектурном контексте. Ведь артефакты, предполагающие повторное использование, не ограничиваются компонентами. Благодаря многократному применению архитектуры создаются семейства систем, а те, в свою очередь, обусловливают появление новых организационных структур и возможностей ведения бизнеса. Значительная часть книги отведена на описание реальных вариантов архитектуры, ориентированных на решение реальных задач реальных организаций. Отобранные примеры иллюстрируют те альтернативы, среди которых архитекторы обычно выбирают наилучшие средства достижения качества; кроме того, они отражают влияние организационных целей на конечные системы. Помимо конкретных примеров в книге предлагается ряд методик проектирования, производства и оценки программной архитектуры. Мы рассмотрим принципы интерпретации требований по качеству в контексте архитектуры, а также приемы построения вариантов архитектуры, отвечающих этим требованиям. Методы представления и реконструкции архитектуры мы намерены оценивать как средства описания архитектуры и проверки ее на правильность. Поговорим мы и о принципах анализа и оценки адекватности архитектуры относительно поставленных перед ней целей. Все эти принципы взяты из нашего собственного опыта работы с различными программными системами, а также из аналогичного опыта наших коллег по Институту программной инженерии. Некоторые из этих систем, насчитывающих миллионы строк кода, разрабатывались большими группами программистов на протяжении нескольких лет. Обсуждаемые в книге экономические вопросы (в частности, влияние архитектуры на конкурентоспособность компаний и срок вывода семейства продуктов на рынок) представлены без особых изысков и специального жаргона. Как- никак, мы разработчики программ, а не экономисты. Посему технические разделы раскрываются значительно глубже. В них мы стараемся отразить последние достижения в области программной архитектуры, акцентировать внимание на «точках» практической реализации исследовательских усилий. Экстраполяции теоретических основ на конкретные задачи служат многочисленные примеры. Для того чтобы осознать их ценность, требуется довольно серьезная подготовка в компьютерных науках, разработке программных средств или в смежных сферах. С другой стороны, мы постарались выстроить изложение конкретных примеров таким образом, чтобы избавить читателя от излишних тонкостей соответствующих прикладных областей. Так, для того чтобы сделать некоторые выводы из примеров, связанных с системой управления воздушным движением и моделированием условий полета, совершенно не обязательно быть летчиком.
|