PassFront
  1. PassFront
  2. База знаний
  3. Принципы S.O.L.I.D

Как применять SOLID в динамических языках?

Принципы S.O.L.I.D

В динамических языках SOLID не отменяется, но опирается на соглашения и утиную типизацию вместо интерфейсов компилятора: контракт фиксируют тесты, протоколы и документация.

Что меняется

  • ISP: вместо формального implements — неформальные роли вроде «объект с методом read»; формализуют через Protocol или ABC, но проверка опциональна.
  • DIP: зависимость от абстракции — просто ожидание объекта нужной формы; подстановка мока в тестах бесплатна.
  • OCP и Strategy: функции первого класса заменяют целые иерархии стратегий — паттерны «тают» в языке.

Что остаётся

  • LSP как поведенческий контракт: наследник не должен ломать ожидания — компилятор не спасёт, спасают контрактные тесты.
  • SRP вообще не зависит от языка.

Риски

Лёгкость подмены провоцирует monkey-patching вместо явных точек расширения — предсказуемость кода падает.

Коротко для собеседования

Принципы остаются, но контракт держится на утиной типизации, соглашениях и тестах, а не на компиляторе. Функции первого класса заменяют многие иерархии стратегий, LSP страхуют контрактными тестами; главный риск — monkey-patching вместо явных точек расширения.

Другие вопросы раздела