Ответ вслух Middle SOLID и принципы обновлено

D - инверсия зависимостей

Вопрос

Что такое инверсия зависимостей и как её применяют во фронтенде?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Логика не должна зависеть от конкретной реализации детали - она зависит от контракта, а деталь подставляется снаружи. Нарушение: компонент списка напрямую импортирует apiClient и дёргает axios.

Что должно прозвучать в ответе

  • модули верхнего уровня зависят от абстракций, а не от реализаций

  • деталь подставляется снаружи, а не импортируется внутри

  • нарушение: компонент импортирует конкретный api-клиент

  • починка: принимать функцию загрузки пропсом или из контекста

  • выгода: тестируемость и замена транспорта без правки логики

  • инверсия зависимостей ≠ внедрение зависимостей, второе - техника

Что могут спросить следом

  • Чем инверсия отличается от внедрения зависимостей
  • Как подменить API в тестах без DI-контейнера
  • Где на фронте DI реально оправдан

Разбор

Логика не должна зависеть от конкретной реализации детали - она зависит от контракта, а деталь подставляется снаружи.

Нарушение: компонент списка напрямую импортирует apiClient и дёргает axios. Теперь его нельзя ни протестировать без сети, ни переиспользовать с другим источником, ни перевести на react-query, не трогая сам компонент.

Починка на фронте обычно скромная: вынести запрос в хук (useOrders) и подменять хук в тестах, либо принимать loadOrders пропсом, либо доставать клиента из контекста. Полноценный DI-контейнер тут почти никогда не нужен.

Терминологическая деталь, которую любят спрашивать: инверсия зависимостей - принцип, внедрение зависимостей - конкретная техника его реализации.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.