Какие знаешь способы внедрение зависимостей

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

Ответ

Внедрение зависимостей (DI) — это паттерн, при котором зависимости передаются объекту извне, а не создаются внутри. Основные способы:

  1. Через конструктор (наиболее предпочтительный):
class UserService {
  constructor(userRepository) {
    this.userRepository = userRepository;
  }
}
  1. Через сеттеры (менее явный, но гибкий):
class UserService {
  setRepository(repo) {
    this.userRepository = repo;
  }
}
  1. Через интерфейс/контекст (например, в React через Context API):
const UserContext = createContext();
<UserContext.Provider value={userService}>
  <Component />
</UserContext.Provider>
  1. DI-контейнеры (в Angular, NestJS):
@Injectable()
class UserService {
  constructor(private userRepository: UserRepository) {}
}

Преимущества DI: тестируемость, гибкость, соблюдение принципа инверсии зависимостей (DIP).