Почему все переходят с MVP на MVVM

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

Ответ

MVVM предлагает более декларативный подход через Data Binding и LiveData/Flow, что уменьшает boilerplate-код. В отличие от MVP, где Presenter активно управляет View, MVVM автоматически обновляет UI при изменении данных, снижая связность.

Пример с LiveData:

class MyViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data

    fun fetchData() {
        _data.value = "Updated"
    }
}

// В Activity/Fragment:
viewModel.data.observe(this) { text -> 
    textView.text = text 
}

Плюсы MVVM:

  • Лучшая поддержка Jetpack (ViewModel, LiveData, Room).
  • Проще тестирование (ViewModel не зависит от Android-контекста).
  • Удобнее для реактивного программирования (Coroutines/Flow).

MVP же требует ручного обновления View и чаще приводит к утечкам памяти из-за сильных ссылок на Activity/Fragment.