Что такое стейт-машина в MVI

«Что такое стейт-машина в MVI» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стейт-машина в MVI (Model-View-Intent) — это концепция, где состояние экрана (State) изменяется предсказуемо в ответ на события (Intents) через чистые функции (редьюсеры). Каждое новое состояние — это неизменяемый объект, который View отображает.

Пример:

data class LoginState(
    val isLoading: Boolean = false,
    val error: String? = null,
    val isSuccess: Boolean = false
)

fun reduce(oldState: LoginState, intent: LoginIntent): LoginState {
    return when (intent) {
        is LoginIntent.Submit -> oldState.copy(isLoading = true)
        is LoginIntent.Error -> oldState.copy(isLoading = false, error = intent.message)
        is LoginIntent.Success -> oldState.copy(isLoading = false, isSuccess = true)
    }
}

Ключевые моменты:

  • Состояние иммутабельно.
  • Изменения только через редьюсеры.
  • Предсказуемость: одинаковый интент + состояние = одинаковый результат.