Ответ
В MVI (Model-View-Intent) модель представляет собой единое неизменяемое состояние приложения. Путь модели:
- Intent → Пользовательские действия (клики, свайпы) преобразуются в намерения (Intents), которые описывают желаемое изменение состояния.
- Processor → Интенты обрабатываются (например, в UseCase или Interactor), где происходит бизнес-логика и генерация нового состояния.
- Model Update → На основе предыдущего состояния и результата обработки создаётся новая неизменяемая модель.
- View Render → View подписывается на изменения модели и перерисовывает UI.
// Пример состояния
data class MainState(
val isLoading: Boolean,
val data: List<Item> = emptyList(),
val error: Throwable? = null
)
// Редуктор (обновление состояния)
fun reduce(oldState: MainState, event: Event): MainState {
return when (event) {
is Event.Loading -> oldState.copy(isLoading = true)
is Event.Success -> oldState.copy(
isLoading = false,
data = event.data
)
// ...
}
}