Какие паттерны проектирования реализует MVVM

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

Ответ

MVVM (Model-View-ViewModel) использует несколько паттернов проектирования:

  1. Observer – View подписывается на изменения ViewModel через LiveData/Flow.
  2. Data Binding – Связывает UI-элементы с данными ViewModel (опционально).
  3. Dependency Injection – ViewModel часто внедряется через DI (например, Dagger/Hilt).
  4. Facade – ViewModel скрывает сложность бизнес-логики от View.

Пример с LiveData:

class MyViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data // Наблюдаемый поток данных

    fun fetchData() {
        _data.value = "New Data"
    }
}

// Во View (Activity/Fragment):
viewModel.data.observe(this) { newData ->
    textView.text = newData // Автоматическое обновление UI
}