Ответ
Принцип Dependency Inversion (D) в SOLID гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня — оба должны зависеть от абстракций.
Пример:
Допустим, у нас есть класс UserRepository, который работает с базой данных. Вместо жесткой привязки к конкретной БД (например, SQLite), мы используем интерфейс:
interface Database {
fun save(user: User)
}
class SQLiteDatabase : Database {
override fun save(user: User) {
// Реализация сохранения в SQLite
}
}
class UserRepository(private val db: Database) {
fun addUser(user: User) {
db.save(user)
}
}
Теперь UserRepository зависит от абстракции (Database), а не от конкретной реализации. Это позволяет легко менять базу данных (например, на Room или Firebase) без изменения кода UserRepository.