Ответ
MVI (Model-View-Intent) — это архитектурный паттерн, основанный на однонаправленном потоке данных. Он похож на MVVM, но строже в управлении состоянием.
Основные компоненты:
- Model — состояние экрана (immutable data class).
- View — отображает состояние и отправляет интенты (пользовательские действия).
- Intent — намерения пользователя (клики, свайпы и т.д.).
Пример состояния:
data class LoginState(
val isLoading: Boolean = false,
val error: String? = null,
val isSuccess: Boolean = false
)
Преимущества:
- Предсказуемость (состояние всегда явное).
- Легко тестировать (чистые функции).
- Нет утечек памяти (нет подписок вью).
Недостатки:
- Больше шаблонного кода.
- Сложнее для простых экранов.
Используется с RxJava/Coroutines + StateFlow.