Ответ
MVVM (Model-View-ViewModel) отличается от других паттернов (MVC, MVP) тем, что ViewModel не имеет прямых ссылок на View, а использует Data Binding или LiveData для обновления UI. Это уменьшает связность и упрощает тестирование.
В MVP Presenter держит ссылку на View и напрямую вызывает методы View (updateUI()), что делает его более зависимым.
В MVC Controller часто управляет и логикой, и обновлением View, что приводит к "раздутым" классам.
Пример с MVVM:
// ViewModel
class MyViewModel : ViewModel() {
val data = MutableLiveData<String>()
fun fetchData() {
data.value = "New Data"
}
}
// Activity/Fragment
viewModel.data.observe(this) { newData ->
textView.text = newData
}