intermediate

Dependency injection

Передавайте collaborators извне, чтобы code зависел от abstractions, tests могли заменять boundaries, а object creation была отделена от behavior.

Внедрение зависимостей передаёт коллабораторов извне — параметры конструктора, factory или DI container — класс зависит от абстракций, в тестах подставляются fakes. Создание объектов — в composition root; бизнес-код про поведение.

Constructor injection делает обязательные зависимости явными; избегайте service locator и скрытых globals.

На интервью: `OrderService` с injected `PaymentGateway` и unit-тест с fake gateway.

Типовые ошибки: container везде без понимания графа; concrete SDK в domain; «опциональные» зависимости как null.

Компромисс — церемония сборки против тестируемости и заменяемой инфраструктуры.

Чеклист:

  • Интерфейсы в конструктор.
  • Сборка на границе приложения.
  • Без скрытых static-зависимостей в domain.