Вопрос проверяет знание архитектурного паттерна Model-View-Intent.
MVI - паттерн, где: View отправляет Intents, Model обрабатывает и возвращает State, View отображает State. Односторонний поток данных, иммутабельные состояния
Компоненты MVI:
Model - хранит состояние и логику
View - отображает состояние и отправляет интенты
Intent - намерения пользователя
Принцип работы:
Пользователь совершает действие → View отправляет Intent
Model обрабатывает Intent → создает новое State
View получает State → обновляет UI
Преимущества:
Предсказуемость (один State)
Легко дебажить
Иммутабельность
Недостатки:
Больше boilerplate кода
Сложность для простых экранов
Пример (Kotlin):
// State
data class LoginState(
val isLoading: Boolean,
val error: String?,
val isSuccess: Boolean
)
// Intent
sealed class LoginIntent {
object Submit : LoginIntent()
data class UpdateCredentials(val email: String, val pass: String) : LoginIntent()
}
// ViewModel
class LoginViewModel : ViewModel() {
private val _state = MutableStateFlow(LoginState(false, null, false))
val state: StateFlow<LoginState> = _state
fun processIntent(intent: LoginIntent) {
when (intent) {
is LoginIntent.Submit -> login()
is LoginIntent.UpdateCredentials -> updateCredentials(intent.email, intent.pass)
}
}
}