Hack Frontend Community

Что такое паттерны GRASP

GRASP (General Responsibility Assignment Software Patterns) — это набор из девяти принципов для распределения обязанностей между классами и объектами в объектно‑ориентированном дизайне.

Принципы GRASP

  1. Information Expert
    Назначайте ответственность тому классу, который имеет необходимую информацию для её выполнения.
  2. Creator
    Создание экземпляра объекта поручайте тому классу, который содержит или агрегирует создаваемые объекты.
  3. Controller
    Внешние события (UI, системные) обрабатывайте специальным классом‑контроллером, отделяя логику от представления.
  4. Low Coupling
    Стремитесь к минимальной связанности между классами, чтобы изменения затрагивали как можно меньше сущностей.
  5. High Cohesion
    Группируйте связанные обязанности в одних и тех же классах, чтобы они оставались узко направленными и понятными.
  6. Polymorphism
    Используйте полиморфизм, чтобы избежать условных конструкций, делегируя вариативное поведение подклассам.
  7. Pure Fabrication
    При необходимости вводите вспомогательные классы («fabrications»), чтобы снизить связанность или повысить когезию.
  8. Indirection
    Вводите посредников между объектами для ослабления прямых зависимостей и лучшей вариативности.
  9. Protected Variations
    Изолируйте участки, которые могут меняться, за стабильными интерфейсами, чтобы минимизировать влияние изменений.

Note:

GRASP не навязывает конкретную структуру, а предоставляет руководство для разумного распределения обязанностей.

Шаги применения GRASP в проекте

1

1. Определите ключевые обязанности

Проанализируйте сценарии использования и выделите набор операций и данных.

2

2. Назначьте экспертов

Для каждой обязанности выберите класс‑«Information Expert», у которого есть нужные данные.

3

3. Проанализируйте связность и когезию

Примените принципы Low Coupling и High Cohesion, перераспределите обязанности при необходимости.

4

4. Введите Fabrication или Indirection

Если класс начинают перегружать или связность слишком сильная, добавьте вспомогательный класс или посредник.

5

5. Защитите изменяемые части

Оберните нестабильный код стабильными интерфейсами (Protected Variations).

Note:

GRASP лучше применять на ранних этапах проектирования, чтобы избежать антипаттернов и улучшить поддержку системы.

Подробнее — в оригинальной статье Лауры Копперсмит:
GRASP на Wikipedia

Итог

  • GRASP — это девять принципов назначения обязанностей в объектно‑ориентированном дизайне.

  • Основные идеи: Information Expert, Low Coupling, High Cohesion и Protected Variations.

  • Следуя GRASP, вы получите более гибкую, поддерживаемую и расширяемую архитектуру.

  • refactoring.guru - паттерны и рефакторинг

  • patterns.dev - паттерны