Паттерны проектирования и архитектурные паттерны
Паттерны проектирования (ПП) — проверенные решения для часто встречающихся проблем в ПО. Шаблоны, которые применяются для повышения эффективности и качества кода.
Архитектурные паттерны (АП) — шаблоны для высокоуровневой организации системы. Они определяют основные компоненты системы, их взаимосвязи и взаимодействия.
Отличие
Служат для разных уровней проектирования ПО:
- ПП работают на уровне классов и объектов. Используются разработчиками при написании / рефакторинге кода.
- АП на более высоком уровне, описывают структуру всего продукта. Определяют, на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют.
Паттерны проект ирования
Применение
- Улучшение читаемости и поддержки кода.
- Уменьшение дублирования кода.
- Помогают быстрее и эффективнее создавать код.
Виды паттернов проектирования
Порождающие
Для создания экземпляра объекта или группы связанных объектов.
- Одиночка (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). Они помогут определить, как распределять обязанности.