Ответ
MVI (Model-View-Intent) состоит из трех ключевых компонентов:
- Model – состояние экрана (immutable data class).
data class MainState(val isLoading: Boolean, val data: List<Item>)
-
View – UI (Activity/Fragment), отображающее состояние и отправляющее интенты.
-
Intent – намерения пользователя (действия: клики, загрузка данных и т.д.).
sealed class MainIntent {
object LoadData : MainIntent()
data class ItemClick(val id: Int) : MainIntent()
}
Дополнительно:
- Reducer – чистая функция, создающая новое состояние на основе предыдущего и результата обработки интента.
- Middleware/Side Effects – обработка побочных эффектов (навигация, аналитика).
Пример цикла:
Пользователь кликает → View отправляет Intent → Обработка в VM → Обновление Model → View рендерит новое состояние.