Ответ
Dependency Inversion (DIP) — принцип SOLID, гласящий, что модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей — детали должны зависеть от абстракций.
Пример без DIP:
class Engine { /* реализация */ }
class Car {
private val engine = Engine() // жесткая зависимость
}
Пример с DIP:
interface EngineInterface { /* абстракция */ }
class PetrolEngine : EngineInterface { /* реализация */ }
class ElectricEngine : EngineInterface { /* другая реализация */ }
class Car(private val engine: EngineInterface) { // зависимость через интерфейс
}
Плюсы:
- Уменьшение связанности кода
- Упрощение тестирования (можно подменять реализации)
- Гибкость архитектуры
Как применять:
- Выделять интерфейсы для зависимостей
- Внедрять зависимости через конструктор/методы (DI)
- Использовать DI-фреймворки (Dagger/Hilt/Koin)
Видео-ответы
▶
Собеседование Python developer на 3000$
▶
Тестовое собеседование Java разработчика #17 - Александр Дранкин
▶
Открытое собеседование на Middle Go-разработчика в Wildberries: код-ревью
▶
Джун был тимлидом, разрабатывал телеграм ботов и стал миддлом? / Техсобес Middle Python Developer
▶
Миддл с 3-мя годами опыта менторит студентов?? / Техсобес на позицию Middle Python Developer
▶
Собеседование C++
▶
Открытое собеседование на Go-разработчика | Тренировочные интервью
▶
Джун-самоучка получил оффер всего за день? / Техсобес Junior Python Developer / Mock interview
▶
У 11-ти классника уже 3 года опыта и собственная CRM на FastAPI?? / Техсобес Junior Python Developer
▶
Тестовое собеседование C# | .NET Junior Mock interview
▶
Тестовое собеседование C# | .NET Junior Mock interview
▶
Собеседование на позицию Java junior #1 Антон
▶
Собеседование на Junior Java разработчика
▶
Публичное собеседование по архитектуре фронтенда / Александр Зубов (Авито)
▶
Тестовое собеседование Java разработчика #20 - Игорь Самойлов