Ответ
Принцип инверсии зависимостей (DIP) — один из SOLID-принципов, гласящий:
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Пример:
interface Storage {
fun save(data: String)
}
class DatabaseStorage : Storage {
override fun save(data: String) { /* SQL запрос */ }
}
class UserRepository(private val storage: Storage) {
fun saveUser(user: User) {
storage.save(user.toString())
}
}
Здесь UserRepository (верхний уровень) зависит от абстракции Storage, а не от конкретной реализации DatabaseStorage (нижний уровень). Это упрощает замену хранилища (например, на SharedPreferencesStorage) без изменения кода репозитория.