GoF vs SOLID vs GRASP — Три уровня абстракции
Три уровня знания о проектировании. Согласно автору: придумывались снизу вверх, применяются сверху вниз.
Иерархия
GRASP ← наиболее абстрактные принципы (Larman)
↓
SOLID ← обобщение опыта в 5 принципов (Боб Мартин)
↓
GoF ← конкретные структуры кода (Gang of Four, 1994)
Хронология (как придумывалось)
- 1994 — GoF: 4 практикующих программиста + методиста собрали 23 повторяющихся шаблона из реального кода. Книга «Design Patterns».
- ~2000 — SOLID: Боб Мартин обобщил паттерны GoF в 5 принципов: SRP, OCP, LSP, ISP, DIP.
- Конец 90-х — GRASP: Крейг Ларман систематизировал ещё более абстрактные принципы: Information Expert, Creator, Controller, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection, Protected Variations.
«Мы пересмотрели много кода и поняли, что их можно обобщить в меньшее количество принципов»
Порядок применения (сверху вниз)
- GRASP — на этапе проектирования системы: общие мазки, общие принципы.
- SOLID — при дизайне классов и модулей: что отвечает за что.
- GoF — конкретная реализация структур кода.
«Сначала GRASP, потом SOLID, потом GoF применяешь»
Применение SOLID разворачивается в GoF
«Если выполнять SOLID, ты постепенно всё равно развернёшь их в паттерны GoF плюс пара паттернов сверху (открытый конструктор)»
Связи:
- SRP + декомпозиция → Facade, Strategy
- OCP → Strategy, Decorator, Template Method
- LSP → Adapter, Bridge
- ISP → Adapter, Facade
- DIP → Abstract Factory, Bridge
Все три применимы в ФП
«SOLID, GRASP — прекрасно адаптируемы под функциональное программирование или мультипарадигменное»
- ООПшники присвоили принципы, но это мультипарадигменно.
- Многие ФП-«принципы» — переписанные SOLID под другие термины.
- Алан Кей под ООП имел в виду модель акторов, не современное наследование.
Что разделяют
| Уровень | Что определяет | Пример вопроса |
|---|---|---|
| GRASP | Кто чем должен заниматься в системе | «Где разместить эту логику?» |
| SOLID | Как должны выглядеть классы/модули | «Можно ли заменить этот класс другим?» |
| GoF | Конкретные структуры реализации | «Какой паттерн тут применить?» |
Главные тезисы автора
- «GoF — это структура кода в одном процессе», не архитектура.
- «Архитектура начинается там, где паттерны GoF заканчиваются» — Enterprise Patterns, DDD.
- «Каждый, кто доучил всё это, рано или поздно сцепит воедино» — но проще, если знаешь порядок.
- Объектно-ориентированное оккупировало термины, на самом деле принципы шире.
- «SOLID и GRASP — это подпорки для плохих языков» (мнение ФП-сообщества, с которым автор не согласен).
- Книги статичны — мысль автора устаревает, нужен живой контекст.
🎓 Источники
- 🎓 Паттерны GoF и принципы SOLID, GRASP — как появились · 2024-08-04
- Главное видео по теме
- Хронология появления
- Применение в обратном порядке
- 🎓 SOLID, GRASP, GoF и функциональное программирование · 2025-11-15
- Принципы переносятся в ФП
- Алан Кей и Actor Model
- Книги фиксируют мысль на момент написания
- 🎓 Что такое паттерны GoF, SOLID, GRASP · 2025-03-03
- 🎓 GRASP принципы с адаптацией для JS и Node.js · 2021-02-25
- 🎓 Паттерны GRASP для JS, TS, Node.js · 2024-06-09
- 🎓 GRASP — Как нужно думать про паттерны, Information Expert · 2025-02-06
- 🎓 Вопросы на интервью SOLID, GRASP, паттерны GoF, DI, LoD · 2024-06-19
- 🎓 SOLID принципы для JS, TS, Node.js · 2024-06-08