Что такое Внедрение зависимости (Dependency injection)
Продвинутые темы
Dependency Injection (внедрение зависимостей) — это паттерн, при котором объект получает свои зависимости извне, а не создаёт их сам. Это снижает связанность и упрощает тестирование.
Проблема без DI
Класс сам создаёт зависимости — жёсткая связанность, трудно подменить в тестах:
class UserService {
constructor() {
this.api = new HttpApi(); // жёстко зашито
}
}С DI
Зависимость передаётся снаружи (через конструктор, параметр, сеттер):
class UserService {
constructor(api) {
this.api = api; // внедрено извне
}
}
new UserService(new HttpApi()); // прод
new UserService(new MockApi()); // тестПлюсы
- Тестируемость — легко подставить мок.
- Слабая связанность — зависимость от абстракции, а не реализации (принцип DIP из SOLID).
- Гибкость — легко заменить реализацию.
Где встречается
- Angular и NestJS — встроенные DI-контейнеры.
- React — через props или Context (передача сервисов/зависимостей).
Коротко для собеседования
Dependency Injection — передача зависимостей объекту извне (через конструктор/параметры), а не создание их внутри. Снижает связанность, реализует принцип инверсии зависимостей и упрощает подмену моками в тестах. Встроен в Angular/NestJS.