Когда применять инверсию зависимостей

«Когда применять инверсию зависимостей» — вопрос из категории Паттерны, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инверсия зависимостей (Dependency Inversion Principle, DIP) применяется, когда нужно уменьшить связанность между модулями и сделать код более гибким для тестирования и модификации.

Когда использовать:

  • Когда модули зависят от абстракций, а не от конкретных реализаций
  • Для упрощения замены зависимостей (например, моков в тестах)
  • В архитектуре, где важна гибкость (например, плагины)

Пример:

// Плохо: компонент зависит от конкретного API
class UserService {
  constructor(private api: ConcreteApi) {}
}

// Хорошо: зависит от интерфейса
interface ApiClient {
  fetchUser(): Promise<User>;
}

class UserService {
  constructor(private api: ApiClient) {}
}