Ответ
Плюсы:
- Четкое разделение ответственности (UI, бизнес-логика, данные)
- Легче тестировать (ViewModel не зависит от View)
- Поддержка Android Architecture Components (LiveData, ViewModel)
- Автоматическая привязка данных (Data Binding)
Минусы:
- Больше boilerplate-кода (особенно без Data Binding)
- Сложность при работе с одноразовыми событиями (например, навигация)
- ViewModel может разрастаться (нужно дробить на UseCase/Interactor)
Пример с LiveData:
class MyViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String> = _data
fun loadData() {
_data.value = "Hello MVVM"
}
}