Архитектура. Что такое программная архитектура. Зачем нужна архитектура, страница 7

Пользователь должен иметь возможность работать со службами представления, не обращаясь к нижележащим уровням.

Отношения между уровнями строго иерархичны по своему характеру. Иными словами, уровень может зависеть от уровня ниже его, но не наоборот. С точки зрения уменьшения связанности желательно также, чтобы между уровнями, не соседствующими друг с другом, не было никакой зависимости. В J2EE есть прекрасный пример такого иерархического представления — контейнер, т.е. уровень, базирующийся на операционной системе.

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

Уровни обычно структурированы таким образом, что в самом низу помещается уровень, наиболее тесно связанный с аппаратными средствами и операционной системой. Средние уровни создают базу для формирования широкого разнообразия программных систем со схожими возможностями. Высший уровень содержит программные элементы, которые необходимы для выполнения слегка различающихся требований конечного пользователя, например, определенные деловые службы, доступные для определенных клиентов, или функции настройки приложения для европейских или азиатских клиентов.

Уровни должны быть важным структурным элементом в любом проекте приложения масштаба предприятия. Вообще говоря, чем больше программная система, тем больше ей требуется уровней. Однако даже в больших приложениях число уровней не достигает десяти.

В языке UML уровни изображаются в виде пакетов со стереотипом <<1ауег>>. На рис. 6.7 показан пример многоуровневой архитектуры в UML. В главе 13 такая архитектура рассматривается более подробно в контексте типового приложения.

Ярусы

Главная задача ярусов— разбиение программной системы на много отдельных процессов. Эти процессы могут быть физически распределены по многим машинам или находиться на одном и том же физическом устройстве.

Ярусы могут соответствовать уровням с разбиением по обязанностям. В этом случае ярус становится синонимом выполнения определенной роли в системе, такой как представление, логика приложения, доступ к данным и т.д.

Основная линия развития вычислительной техники в настоящее время привела к распространению многоярусных архитектур. На начальном этапе развития лицо вычислительной системы определяли универсальные ЭВМ и терминалы ввода-вывода. В течение долгого времени общепринятыми были двухуровневые клиент-серверные системы на базе локальных сетей. И хотя n-уровневая архитектура уже долго применялась в определенных областях, лишь недавно она стала преобладающей в промышленности.

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

Такое разбиение порождает следующие проблемы.

·  Эффективность и надежность связи между ярусами.

·  Необходимость определения и размещения компонентов в распределенной среде.

·  Проблемы безопасности в потенциально разнородной и территориально рассредоточенной системе.

·  Синхронизация между уровнями.

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

·  Необходимость в дополнительных интерфейсах для адаптации  компонентов к ярусной архитектуре.

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