🔖Паттерны проектирования и архитектурные паттерны
Паттерны проектирования (ПП) — проверенные решения для часто встречающихся проблем в ПО. Шаблоны, которые применяются для повышения эффективности и качества кода
Архитектурные паттерны (АП) — шаблоны для высокоуровневой организации системы. Они определяют основные компоненты системы, их взаимосвязи и взаимодействия
✳️ Отличие
Служат для разных уровней проектирования ПО:
🟢 ПП работают на уровне классов и объектов. Используются разработчиками при написании / рефакторинге кода
🔵 АП на более высоком уровне, описывают структуру всего продукта. Определяют на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют
✳️ Паттерны проектирования
Применение
〰 Улучшение читаемости и поддержки кода
〰 Уменьшение дублирования кода
〰 Помогают быстрее и эффективнее создавать код
Делятся на три вида:
🟢 Порождающие
Для создания экземпляра объекта или группы связанных объектов
➡️ Одиночка (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)
Они помогут определить, как распределять обязанности
⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу
#проектирование #архитектура
Post #393
14.2K
- 🔥 25
- 👍 16
- ⚡ 3
- ❤ 1