Что такое паттерны GRASP
GRASP (General Responsibility Assignment Software Patterns) — это набор из девяти принципов для распределения обязанностей между классами и объектами в объектно‑ориентированном дизайне.
Принципы GRASP
- Information Expert
Назначайте ответственность тому классу, который имеет необходимую информацию для её выполнения. - Creator
Создание экземпляра объекта поручайте тому классу, который содержит или агрегирует создаваемые объекты. - Controller
Внешние события (UI, системные) обрабатывайте специальным классом‑контроллером, отделяя логику от представления. - Low Coupling
Стремитесь к минимальной связанности между классами, чтобы изменения затрагивали как можно меньше сущностей. - High Cohesion
Группируйте связанные обязанности в одних и тех же классах, чтобы они оставались узко направленными и понятными. - Polymorphism
Используйте полиморфизм, чтобы избежать условных конструкций, делегируя вариативное поведение подклассам. - Pure Fabrication
При необходимости вводите вспомогательные классы («fabrications»), чтобы снизить связанность или повысить когезию. - Indirection
Вводите посредников между объектами для ослабления прямых зависимостей и лучшей вариативности. - Protected Variations
Изолируйте участки, которые могут меняться, за стабильными интерфейсами, чтобы минимизировать влияние изменений.
Note:
GRASP не навязывает конкретную структуру, а предоставляет руководство для разумного распределения обязанностей.
Шаги применения GRASP в проекте
1. Определите ключевые обязанности
Проанализируйте сценарии использования и выделите набор операций и данных.
2. Назначьте экспертов
Для каждой обязанности выберите класс‑«Information Expert», у которого есть нужные данные.
3. Проанализируйте связность и когезию
Примените принципы Low Coupling и High Cohesion, перераспределите обязанности при необходимости.
4. Введите Fabrication или Indirection
Если класс начинают перегружать или связность слишком сильная, добавьте вспомогательный класс или посредник.
5. Защитите изменяемые части
Оберните нестабильный код стабильными интерфейсами (Protected Variations).
Note:
GRASP лучше применять на ранних этапах проектирования, чтобы избежать антипаттернов и улучшить поддержку системы.
Подробнее — в оригинальной статье Лауры Копперсмит:
GRASP на Wikipedia
Итог
-
GRASP — это девять принципов назначения обязанностей в объектно‑ориентированном дизайне.
-
Основные идеи: Information Expert, Low Coupling, High Cohesion и Protected Variations.
-
Следуя GRASP, вы получите более гибкую, поддерживаемую и расширяемую архитектуру.
-
refactoring.guru - паттерны и рефакторинг
-
patterns.dev - паттерны