Что значит D в SOLID

«Что значит D в SOLID» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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).