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.