10 самых используемых архитектурных паттернов

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



Что такое архитектурный паттерн?


Согласно (английской) Википедии,


Архитектурный паттерн — это типовое, повторно переиспользуемое решение часто встречающейся проблемы при разработке архитектуры программного обеспечения. Архитектурные паттерны аналогичны паттернам проектирования за исключением более широкого охвата у первых.


В этой статье я расскажу о 10 самых распространённых архитектурных паттернах, об их плюсах и минусах.


  1. Многоуровневая архитектура (Layered)
  2. Клиент-сервер (Client-server)
  3. Ведущий-ведомый (Master-slave)
  4. Канал-фильтр (Pipe-filter)
  5. Посредник (Broker)
  6. Одноранговое соединение (Peer-to-peer)
  7. Шина событий (Event-bus)
  8. Модель-представление-контроллер (MVC)
  9. Доска объявлений (Blackboard)
  10. Интерпретатор (Interpreter)

1. Многоуровневая архитектура


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


Чаще всего встречаются 4 таких уровня:


  • Представление (или Интерфейс)
  • Приложение (или Сервис)
  • Бизнес логика (или Предметная область)
  • Доступ к данным (или Персистентность)

Использование


  • Десктопные приложения.
  • Электронная коммерция в вебе.

2. Клиент-сервер


В этом паттерне участвует две стороны — один сервер и несколько клиентов. Клиенты делают запросы к серверу, а сервер их обслуживает и продолжает ждать новых запросов.


Использование


  • Любые онлайновые приложения.


3. Ведущий-ведомый


Здесь так же два главных компонента — ведущий и ведомые. Ведущий распределяет работу среди идентичных ведомых и агрегирует возвращаемые результаты.


Использование


  • При репликации БД ведущая база данные рассматривается как главная, а ведомые базы синхронизируются с ней.
  • Периферийные устройства, подключенные к шине в компьютерной системе (главный диск и подчиненный диски).


4. Канал-фильтр


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


Использование


  • Компиляторы. Последовательные фильтры выполняют лексический анализ, семантический анализ и генерацию машинного кода.
  • Рабочие процессы в биоинформатике.


5. Посредник


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



Серверы отправляют информацию о своих возможностях (услугах и характеристиках) посреднику. Клиенты запрашивают услуги посредника, который перенаправляет запрос подходящему серверу из своего реестра.


Использование




6. Одноранговое соединение


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


Использование


  • Сервисы обмена файлами типа Gnutella и G2
  • Мультимедийные протоколы вроде P2PTV и PDTP.


7. Шина событий


Этот паттерн состоит из четырёх основных компонентов: источник события, подписчик, канал и шина событий. Источники публикуют сообщения для каналов на шине событий. Слушатели подписываются на нужные им каналы и получают уведомления о новых сообщениях.


Использование


  • Разработка под Андроид
  • Сервисы уведомлений


8. Модель-представление-контроллер


Паттерн делит приложение на три части:


  1. модель — содержит данные и функции для их обработки
  2. представление — отображает информацию для пользователя (может существовать несколько разных представлений)
  3. контроллер — обрабатывает вводимые пользователем данные

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


Использование


  • Архитектура любых веб-приложений в большинстве языков программирования.
  • Фреймворки типа Django и Rails.


9. Доска объявлений


Этот шаблон полезен при работе с задачами, для которых нет точного решения. Доска объявлений состоит из трёх основных компонентов.


  • доска — объект, хранящий задачи и элементы их решений
  • источник знания — модуль, умеющий полностью или частично решать какие-то задачи
  • компонент управления — выбирает, настраивает и выполняет источники знания для решения задач с доски

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


Учебный пример реализации паттерна на Python можно посмотреть здесь — прим. перев.


Использование


  • Распознавание речи
  • Распознавание и отслеживание автомобилей
  • Идентификация структуры белков
  • Интерпретация сигналов сонара


10. Интерпретатор


Этот паттерн используется для разработки компонента, который интерпретирует программы, написанные на специальном языке. Интерпретатор определяет как разбивать текст программы на элементы (вроде выражений) и выполнять их. Чаще всего у каждого элемента нового языка есть свой класс.


Использование


  • Языки запросов к БД типа SQL.
  • Языки описания протоколов.




Спасибо, что дочитали!

Источник: habr.ru