PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое Внедрение зависимости (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.

Другие вопросы раздела