Какие знаешь частные случаи Dependency Inversion Principle

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

Ответ

DIP (Dependency Inversion Principle) гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Частные случаи:

  1. Внедрение зависимостей через конструктор
class UserRepository(private val api: ApiService) { ... }

Вместо создания ApiService внутри репозитория, зависимость инжектируется извне.

  1. Использование интерфейсов/абстрактных классов
interface Logger {
    fun log(message: String)
}

class FileLogger : Logger { ... }
class DatabaseLogger : Logger { ... }

Модули зависят от интерфейса Logger, а не от конкретных реализаций.

  1. Dagger/Hilt для DI
    Библиотеки автоматизируют внедрение зависимостей, следуя DIP.

  2. Тестирование с Mock-объектами
    Заменяем реальные зависимости mock-ами в тестах благодаря абстракциям.