Ответ
Dependency Injection (DI) и Service Locator (SL) — это паттерны управления зависимостями, но с разными подходами.
DI внедряет зависимости извне (через конструктор, свойства или методы), делая их явными. Это упрощает тестирование и соблюдение принципа инверсии зависимостей (DIP).
class UserService {
constructor(private db: Database) {} // DI через конструктор
}
Service Locator предоставляет централизованный контейнер, из которого зависимости запрашиваются внутри класса. Это скрывает зависимости, усложняя понимание кода и тестирование.
class UserService {
private db = ServiceLocator.get<Database>('db'); // SL
}
Ключевые отличия:
- DI прозрачен (зависимости видны), SL скрывает их.
- DI упрощает мокирование для тестов, SL требует настройки контейнера.
- DI следует принципу явных зависимостей, SL может привести к скрытым связям.