Перейти к основному содержимому

Паттерны проектирования и архитектурные паттерны

Паттерны проектирования (ПП) — проверенные решения для часто встречающихся проблем в ПО. Шаблоны, которые применяются для повышения эффективности и качества кода.

Архитектурные паттерны (АП) — шаблоны для высокоуровневой организации системы. Они определяют основные компоненты системы, их взаимосвязи и взаимодействия.

Отличие

Служат для разных уровней проектирования ПО:

  • ПП работают на уровне классов и объектов. Используются разработчиками при написании / рефакторинге кода.
  • АП на более высоком уровне, описывают структуру всего продукта. Определяют, на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют.

Паттерны проектирования

Применение

  • Улучшение читаемости и поддержки кода.
  • Уменьшение дублирования кода.
  • Помогают быстрее и эффективнее создавать код.

Виды паттернов проектирования

Порождающие

Для создания экземпляра объекта или группы связанных объектов.

  • Одиночка (Singleton): гарантирует существование только одного экземпляра определенного класса, который можно использовать из любой части программы.
  • Фабрика (Factory): создает объекты через специальный метод или класс, скрывая детали их создания.
  • Прототип (Prototype): объект сам создает свои копии.
  • Ленивая инициализация (Lazy Initialization): создает объект по мере необходимости.

Структурные

В основном связаны с композицией объектов, с тем, как сущности могут использовать друг друга.

  • Декоратор (Decorator): динамически добавляет новые обязанности объектам.
  • Фасад (Facade): предоставляет простой интерфейс к сложной системе, скрывая её реализацию.
  • Заместитель (Proxy): паттерн, похожий на «Фасад», но со специальным объектом-заместителем, который контролирует доступ к основному.

Поведенческие

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

  • Наблюдатель (Observer): позволяет объектам следить за изменениями состояния другого объекта.
  • Посредник (Mediator): организует слабые связи между объектами, чтобы снизить их зависимость друг от друга.
  • Хранитель (Memento): помогает сохранить объект в каком-то состоянии с возможностью вернуться к нему в будущем.

Архитектурные паттерны

Применение

  • Определение общей структуры системы.
  • Обеспечение масштабируемости и надежности.
  • Упрощение взаимодействия между компонентами.

Примеры архитектурных паттернов

Более абстрактные

  • Service-Oriented Architecture (SOA): система организована вокруг предоставления услуг (сервисов), которые могут использоваться различными приложениями.
  • Layered Architecture (Слоистая архитектура): делит систему на уровни (слои), каждый из которых отвечает за конкретный функционал.

Более конкретные

  • Event-Driven Architecture (Событийно-ориентированная архитектура): компоненты системы взаимодействуют через передачу событий. Это один из способов реализации SOA.
  • Микросервисы: разделяет приложение на небольшие, самостоятельные сервисы, которые могут разрабатываться и разворачиваться независимо. Является конкретным примером SOA.
  • Клиент - сервер: делит систему на серверы, предоставляющие услуги, и клиенты, запрашивающие их.
  • MVC (Model-View-Controller): разделяет систему на три основные компоненты для улучшения тестирования и организации кода.

Взаимосвязь GRASP с архитектурными паттернами

В объектно-ориентированных системах внутри архитектурных паттернов можно использовать паттерны GRASP, например, паттерны для распределения обязанностей между классами и объектами (Creator, Information Expert). Они помогут определить, как распределять обязанности.

Подборка материалов по паттернам проектирования и архитектурным паттернам

  1. Паттерны / шаблоны проектирования
  2. 10 архитектурных стилей программного обеспечения и их паттерны
  3. Список основных паттернов проектирования
  4. Паттерны проектирования: какие бывают и как выбрать нужный
  5. Пошаговое создание архитектуры
  6. Топ-5 архитектурных паттернов для распределённых систем
  7. Паттерны проектирования и их отличие от паттернов архитектурных
  8. Разбираемся в популярных архитектурных паттернах: от MVC до EDA
  9. Самые важные архитектурные шаблоны, которые нужно знать
  10. Основные архитектурные шаблоны построения ПО
  11. Паттерн (шаблон)
  12. Шпаргалка по шаблонам проектирования
  13. Слоистая архитектура приложений: как обеспечить поддерживаемость доменного слоя

Видео

  1. MVC, MVVM Архитектура. Наглядная теория и примеры
  2. Что такое MVC за 4 минуты
  3. Архитектура ПО. Введение
  4. 3 самых популярных GoF паттерна
  5. Топ паттернов проектирования. Зачем они нужны и когда их применять? | подкаст Чистый код

Книги

  1. Приемы объектно-ориентированного проектирования. Паттерны проектирования — Р. Хелм, Дж. Влиссидес (от авторов GoF)
  2. P of EAA: Patterns of Enterprise Application Architecture (Шаблоны корпоративных приложений) — М.Фаулер
  3. Паттерны проектирования на платформе .NET — Сергей Тепляков
  4. Head First. Паттерны проектирования — Э. Фримен, Э. Робсон, К. Сьерра, Б. Бейтс