Ответ
Dependency Inversion Principle (DIP) — принцип инверсии зависимостей.
Суть:
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Пример (Kotlin):
// Абстракция (интерфейс)
interface Storage {
fun save(data: String)
}
// Деталь (реализация)
class DatabaseStorage : Storage {
override fun save(data: String) { /* сохранение в БД */ }
}
// Модуль верхнего уровня зависит от абстракции
class DataManager(private val storage: Storage) {
fun saveData(data: String) {
storage.save(data)
}
}
Плюсы:
- Гибкость (легко менять реализации, например, на
FileStorage). - Упрощение тестирования (можно подменить реализацию на mock).