Многоуровневая архитектура – это наиболее распространенный шаблон архитектуры в большинстве приложений для компаний. Его ещё называют n-tier архитектурой, где n – количество уровней. Это шаблон де-факто для приложений JAVA EE.

Пример сценариев для уровней

Пример сценариев для уровней

Источник: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture

Уровень представления

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

Уровень бизнес-логики

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

Уровень хранения

Это уровень представления для данных. Он включает в себя представление интерфейса для доступа к данным, объектно-реляционное отображение и другие режимы представления перманентных данных на уровне приложения. Проще говоря, на этом уровне отображаются перманентные данные в оперативной памяти, которая обычно находится на дисках следующего уровня.

Уровень базы данных

Простые базы данных, расширяющиеся до SAN (сети хранения данных).

Структура уровней

Уровни состоят из компонентов. Эти компоненты находятся на более абстрактном уровне, чем классы объектов и пакеты. Компонент может состоять из набора пакетов, которые выполняют одну задачу.

«Компоненты обеспечивают разделение проблем»

Основные понятия

Закрытые уровни

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

Закрытые уровни

Источник: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture

Открытые уровни

Система позволяет перепрыгивать через открытые уровни и попадать на те, что расположены ниже. Это необходимо в ответственных системах (которые должны безотказно функционировать в течение выполнения целевой задачи), где задержки будут стоит дорого. Обычно переход от уровня к уровню подразумевает коммуникационные издержки. Поэтому временами разумно обходить уровни и напрямую получать данные с нужного уровня.

Открытые уровни

Источник: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture

Анализ шаблона

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

Тестопригодность шаблонов

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

Производительность и масштабируемость

Эти показатели могут быть низкими из-за издержек передачи данных. Для повышения производительности, возможно, потребуется преобразовывать типы сообщений и т.д… Когда дело касается масштабируемости, добавление новых уровней не помогает. Шаблон не может разрастаться бесконечно.

Постскриптум

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

Перевод статьи «Software Architecture Patterns» by Anuradha Wickramarachchi