GRASP принципы — обзор

GRASP — 9 принципов распределения ответственности (Крэг Ларман). Это не паттерны (как GoF), а принципы: как решать, какому объекту/модулю отдать конкретную задачу.

Что это / Зачем

  • GRASP — это философия программирования, не свод правил.
  • Не похож на GoF (готовые шаблоны) и не как SOLID (жёсткие принципы) — это про мышление, как декомпозировать.
  • Помогает принимать решения «кто должен это делать?» при проектировании.

9 принципов GRASP

  1. Information Expert — ответственность отдаём тому, у кого есть данные.
  2. Creator — кто создаёт объект (тот, кто им владеет/использует).
  3. Low Coupling — мало связей между модулями.
  4. High Cohesion — много связей внутри модуля.
  5. Controller — изолирует бизнес-логику от UI/входа.
  6. Polymorphism — поведение через интерфейс/тип, не через if/switch.
  7. Pure Fabrication — выдуманная абстракция (нет в предметной области).
  8. Indirection — посредник между связанными сущностями (Mediator).
  9. Protected Variations — защита от изменений через стабильные интерфейсы.

Парные принципы

Пара Суть
Low Coupling ↔ High Cohesion Чем лучше одно, тем лучше другое
Information Expert ↔ Creator Кто владеет данными — тот и создаёт
Indirection ↔ Pure Fabrication Часто посредник = выдумка

Антипаттерн: размывание ответственности

// плохо: GRASP игнорируется — лезем в чужие кишки
list.first.next() = newNode; // нарушение Information Expert
list.head = list.head.next(); // нарушение Information Expert
// исправление: list.insert(node), list.shift()

🎓 Источники

  • 🎓 [GRASP принципы с адаптацией для JS и Node.js] · 2021-02-25 · YouTube
    • GRASP — принципы распределения ответственности. В JS прототипный патчинг сильно мешает реализации GRASP.
  • 🎓 [Принципы GRASP, часть 2] · 2024-07-30 · YouTube
    • «GRASP — это идеология программирования, не как SOLID или GoF».
  • 🎓 [GRASP, SOLID, GoF — как появились] · 2024-08-04 · YouTube

См. также