MVVM — это архитектурный паттерн, который разделяет приложение на три основных компонента:
Model/Repository
— отвечает за данные и бизнес-логику.View
— отвечает за отображение данных и взаимодействие с пользователем.ViewModel
— выступает посредником междуModel
иView
, предоставляет данные дляView
и обрабатывает пользовательские действия.
- Разделение ответственностей: Каждый компонент отвечает за свою часть, что упрощает поддержку и тестирование.
- Упрощение тестирования:
ViewModel
и Model можно тестировать отдельно отView
. - Жизненный цикл:
ViewModel
сохраняет данные при повороте экрана, что улучшает пользовательский опыт.
- Отвечает за данные и бизнес-логику.
- Может включать:
-
- Работу с сетью (
Retrofit
,OkHttp
).
- Работу с сетью (
-
- Работу с базой данных (
Room
).
- Работу с базой данных (
-
- Логику обработки данных.
- Отвечает за отображение данных и взаимодействие с пользователем.
- Обычно это
Activity
,Fragment
илиComposable
(вJetpack Compose
). View
не должна содержать бизнес-логику.
- Выступает посредником между
Model
иView
. - Обрабатывает пользовательские действия и работает с
State
машиной. - Отвечает за подготовку данных для
View
. - Не знает о существовании
View
(что делает код более тестируемым). - Использует
LiveData
илиStateFlow
для передачи данных вView
.
viewModelScope
- удобное управление жизненным циклом для сохранения данных.
- Разделение ответственности
- Отдельное тестирование модулей
View
запрашивает данные уViewModel
.ViewModel
получает данные изModel
.ViewModel
передает данные вView
с помощьюLiveData
илиStateFlow
.View
отображает данные пользователю.- При взаимодействии пользователя (например, нажатие кнопки),
View
сообщает об этомViewModel
. ViewModel
обрабатывает действие и обновляет данные.