MVI (Model-View-Intent) — это архитектурный паттерн, построенный вокруг однонаправленного потока данных, где каждый слой имеет одну, чётко определённую ответственность:
Поток строго однонаправленный:
Взаимодействие пользователя → Intent → ViewModel обрабатывает intent → выбрасывает новый State → View отображает State
Это значит, что View никогда не мутирует состояние напрямую — она только реагирует на то, что выбрасывает ViewModel.
sealed classes в Kotlin идеально подходят для определения типов Intent и State, так как они ограничивают возможные значения и позволяют использовать исчерпывающие when-выражения:
sealed class Intent {
data class LoadData(val id: String) : Intent()
object Refresh : Intent()
}
data class State(
val data: String? = null,
val isLoading: Boolean = false,
val error: String? = null
)
ViewModel предоставляет состояние как StateFlow, а View его собирает:
val state: StateFlow<State> = _state.asStateFlow()
MVI особенно эффективен в сложных UI с большим количеством пользовательских взаимодействий и комбинаций состояний, где иначе было бы трудно поддерживать консистентность состояния между компонентами.
В архитектуре MVI слой View может напрямую изменять состояние Model при обработке взаимодействий пользователя, если после этого выпустить Intent, чтобы синхронизировать ViewModel.
Новый — ещё не проверен сообществом
Вы