SOLID — альтернативная позиция (контр-консенсус)
автор расширяет SOLID за пределы ООП, фиксирует ограничения принципов и называет паттерны, которые SOLID полностью ломают.
Расширение SOLID на парадигмы
- SOLID мультипарадигменный: применим к ООП, процедурному, ФП, реактивному.
- SRP — частный случай separation of concerns; применим к функциям и модулям.
- DIP — самый общий принцип; IoC, DI, Service Locator — его подчинённые механизмы.
Что ломает SOLID полностью
- Active Record ломает все 5 принципов: SRP (данные + персистентность), OCP (нельзя расширить без изменения), LSP (наследование Active Record хрупкое), ISP (толстые модели), DIP (зацепление на СУБД).
- Laravel-стиль отвергает SOLID идеологически. Rails похоже.
- ORM в общем случае добавляет связанности, размывает ответственность.
Чего SOLID НЕ делает
- TypeScript не проверяет соответствие SOLID. TS-код может на 100% компилиться и нарушать все принципы.
- SOLID не автоматизируется. Линтеры не находят: «у вас тут класс с многими ответственностями». Нужен другой программист на code review.
- GPT-4 плохо рефакторит по SOLID, потому что обучался на массе JS-кода, где SOLID не соблюдается.
Где остановиться
- Где остановиться в дроблении по SRP — никто точно не скажет.
- Только интуиция инженера, нарабатывается опытом.
- Частичное соответствие SOLID — норма.
Антипаттерн: слепое применение
// 7 классов для сохранения формы из 3 полей
class FormDataValidatorFactory { /* ... */ }
class FormValidationRulesProvider { /* ... */ }
class FormDataSerializer { /* ... */ }
class FormSubmissionStrategyChain { /* ... */ }
// и т.д. — overengineering ради SOLID
🎓 Источники
- 🎓 [SOLID принципы для JS/TS/Node.js] · 2024-06-08 · YouTube
- Альтернативная позиция: SOLID мультипарадигменный.
- Контр-консенсус: «Laravel абсолютно отвергает SOLID. Active Record ломает весь SOLID разом».
- «SOLID не автоматизируется. Невозможно написать extension, который найдёт класс с многими ответственностями».
- 🎓 [Зачем GoF, SOLID, GRASP, если есть AI] · 2025-12-15 · YouTube
- AI не понимает идею кастомной структуры данных. Подсовывает Object Pool вместо Unrolled List. Знает паттерны на словах, не на сути.
- 🎓 [Вопросы на интервью SOLID, GRASP, GoF] · 2024-06-19 · YouTube