В чем разница между взаимодействия Viewmodel с View и Presenter с View

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

Ответ

ViewModel взаимодействует с View через LiveData/StateFlow, автоматически обновляя UI при изменении данных (наблюдаемый паттерн). ViewModel переживает изменения конфигурации и не хранит ссылки на View, что предотвращает утечки памяти.

Presenter же напрямую управляет View через интерфейсы, требует ручной подписки/отписки и уязвим к утечкам, если View не очищена. Presenter уничтожается при повороте экрана.

Пример с ViewModel:

// ViewModel
val data = MutableLiveData<String>()  

// Fragment  
viewModel.data.observe(viewLifecycleOwner) { value ->  
    textView.text = value  
}  

Пример с Presenter:

// Presenter  
fun attachView(view: ViewContract) {  
    this.view = view  
}  

fun updateData() {  
    view?.showData("new data")  
}