GRASP принципы — обзор
GRASP — 9 принципов распределения ответственности (Крэг Ларман). Это не паттерны (как GoF), а принципы: как решать, какому объекту/модулю отдать конкретную задачу.
Что это / Зачем
- GRASP — это философия программирования, не свод правил.
- Не похож на GoF (готовые шаблоны) и не как SOLID (жёсткие принципы) — это про мышление, как декомпозировать.
- Помогает принимать решения «кто должен это делать?» при проектировании.
9 принципов GRASP
- Information Expert — ответственность отдаём тому, у кого есть данные.
- Creator — кто создаёт объект (тот, кто им владеет/использует).
- Low Coupling — мало связей между модулями.
- High Cohesion — много связей внутри модуля.
- Controller — изолирует бизнес-логику от UI/входа.
- Polymorphism — поведение через интерфейс/тип, не через
if/switch. - Pure Fabrication — выдуманная абстракция (нет в предметной области).
- Indirection — посредник между связанными сущностями (Mediator).
- 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