intermediate

Dependency Injection

Передавайте collaborators извне, чтобы policy code оставался testable и не hard-code infrastructure choices.

Dependency injection передаёт collaborators извне — конструкторы, factories, containers — чтобы policy code не hard-code инфраструктуру. Позволяет подменять БД, clocks и HTTP clients в тестах и окружениях. Constructor injection для обязательных зависимостей и явные lifetimes.

На интервью: DI vs service locator и global singletons. Scoped vs singleton lifetimes в web requests.

Типовые ошибки: container resolve в domain code; циклические providers; десять optional dependencies вместо пересмотра границ.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Интерфейсы на границах policy.
  • Composition root при старте приложения.
  • Lifetime в регистрации каждого service.
  • Тесты с manual doubles.