Какой принцип SOLID будет нарушен если модель будет знать о конкретной реализации ViewModel

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

Ответ

Нарушается Принцип инверсии зависимостей (DIP). Модель не должна зависеть от деталей (например, ViewModel), а только от абстракций. Это усложняет тестирование и переиспользование модели.

Пример нарушения:

class UserModel {
    fun updateUser(viewModel: UserViewModel) { // Нарушение DIP
        viewModel.updateUI()
    }
}

Исправленный вариант:

interface UserUpdateListener {
    fun onUserUpdated()
}

class UserModel(private val listener: UserUpdateListener) {
    fun updateUser() {
        listener.onUserUpdated() // Модель зависит от абстракции
    }
}

class UserViewModel : UserUpdateListener {
    override fun onUserUpdated() {
        updateUI()
    }
}