Ответ
MVVM (Model-View-ViewModel) разделяет приложение на три слоя. Presentation слой включает View и ViewModel:
- View (Activity/Fragment) – отвечает за UI, обработку событий и отображение данных. Не содержит бизнес-логики, только взаимодействие с ViewModel.
- ViewModel – хранит и обрабатывает данные для View, обеспечивает связь с Model (бизнес-логикой). Переживает изменения конфигурации (например, поворот экрана).
Связь между View и ViewModel:
- View подписывается на LiveData/Flow из ViewModel.
- View вызывает методы ViewModel для действий пользователя.
Пример:
// ViewModel
class MyViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String> = _data
fun loadData() {
_data.value = "Loaded data"
}
}
// View (Fragment)
viewModel.data.observe(viewLifecycleOwner) { data ->
textView.text = data
}
button.setOnClickListener { viewModel.loadData() }
Принципы:
- View не знает о Model.
- ViewModel не имеет ссылок на View (избегаем утечек памяти).
- Данные приходят через наблюдаемые компоненты (LiveData/StateFlow).