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

См. также