D - инверсия зависимостей
Вопрос
Что такое инверсия зависимостей и как её применяют во фронтенде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
модули верхнего уровня зависят от абстракций, а не от реализаций
деталь подставляется снаружи, а не импортируется внутри
нарушение: компонент импортирует конкретный api-клиент
починка: принимать функцию загрузки пропсом или из контекста
выгода: тестируемость и замена транспорта без правки логики
инверсия зависимостей ≠ внедрение зависимостей, второе - техника
Что могут спросить следом
- Чем инверсия отличается от внедрения зависимостей
- Как подменить API в тестах без DI-контейнера
- Где на фронте DI реально оправдан
Разбор
Логика не должна зависеть от конкретной реализации детали - она зависит от контракта, а деталь подставляется снаружи.
Нарушение: компонент списка напрямую импортирует apiClient и дёргает axios. Теперь
его нельзя ни протестировать без сети, ни переиспользовать с другим источником,
ни перевести на react-query, не трогая сам компонент.
Починка на фронте обычно скромная: вынести запрос в хук (useOrders) и подменять хук
в тестах, либо принимать loadOrders пропсом, либо доставать клиента из контекста.
Полноценный DI-контейнер тут почти никогда не нужен.
Терминологическая деталь, которую любят спрашивать: инверсия зависимостей - принцип, внедрение зависимостей - конкретная техника его реализации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.