В сущности GRASP - это строительные блоки, на основе которых построены GOF паттерны, хотя GRASP и были выведены позже. Они заполнили пустоту между принципами OOP и паттернами GOF.
Patterns list:
- Information expert
- Creator
- Controller
- Low Coupling
- High Cohesion
- Polymorphism
- Pure Fabrication
- Indirection
- Protected Variations
1. Information expert
Частный случай принципа "Low Coupling".Проблема
В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация.
Решение
Назначить обязанность аккумуляции информации, расчёта и т. п. классу (информационному эксперту), обладающему необходимой информацией.
Рекомендации
Информационным экспертом может быть не один класс, а несколько.
Пояснение
Информация должна обрабатываться там, где она есть.
2. Creator
Проблема"Кто" должен отвечать за создание экземпляра класса.
Решение
Назначить классу B обязанность создавать объекты другого класса A.
Рекомендации
Логично использовать паттерн если класс B содержит, агрегирует, активно использует и т. п. объекты класса A.
Пояснение
Создавать класс должен тот, кому он нужен.
3. Controller
Проблема"Кто" должен отвечать за обработку входных системных событий?
Решение
Обязанности по обработке системных сообщений делегируются специальному классу. Контроллер - это объект, который отвечает ха обработку системных событий и не относиться к интерфейсу пользователя. Контроллер определяет методы выполнения системных операций.
Рекомендации
Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий).
Пояснение
Централизованная обработка запросов к системе. Пример: превращение асинхронных запросов от UI к домену (бизнес логике) в синхронные.
4. Low Coupling
ПроблемаОбеспечить низкую связанность про создании экземпляра класса и связывании его с другим классом.
Решение
Распределить обязанности между объектами так, чтобы степень связанности оставалась низкой.
Пояснение
Если в системе есть несколько объектов, то связи между ними должны быть минимальны.
Для уменьшения влияния изменения одной части системы на другую. Такую систему легче декомпозировать.
5. High Cohesion
ПроблемаНеобходимо обеспечить выполнение объектами разнородных функций.
Решение
Обеспечить распределение обязанностей с высоким зацеплением.
Пояснение
Все методы в классе должны быть логически "зацеплены" (относиться к одному и тому же). Класс должен иметь одно назначение.
6. Polymorphism
Проблема• Как обрабатывать альтернативные варианты поведения на основе типа?
• Как заменять подключаемые компоненты системы?
Решение
• Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций этого класса.
• Каждая внешняя система имеет свой интерфейс.
Пояснение
Применимо для расширения функциональности системы без переписывания кода (например система плагинов).
7. Pure Fabrication
ПроблемаКакой класс должен обеспечивать реализацию паттернов "Low Coupling", и "High Cohesion"?
Решение
Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области (синтезировать искусственную сущность для обеспечения высокого зацепления и слабого связывания).
Пояснение
Когда в предметной области не существует объекта, который необходим для соблюдения 2х выше указанных принципов, создаётся искусственный объект.
Пример 1 - постоянное хранилище чего либо с методами для добавления и обновления элементов.
Пример 2 - facade.
8. Indirection
ПроблемаКак перераспределить обязанности объектов, чтобы обеспечить отсутствие прямого связывания?
Решение
Присвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту.
Пояснение
Зависимость на интерфейсах.
9. Protected Variations
ПроблемаКак спроектировать систему так, чтобы изменение одних её элементов не влияло на другие?
Решение
Идентифицировать точки возможных изменений или неустойчивости и распределить обязанности таким образом, чтобы обеспечить устойчивую работу системы.
Пояснение
Использование всех выше перечисленных принципов.
No comments:
Post a Comment