Sobes.tech
Back to questions
Junior — Middle
73

Расскажите о вашем опыте реализации архитектурного паттерна Model-View-Intent (MVI).

Companies where asked
SkillStaff
Rostic's
Юрент
IBS

Answer from AI

sobes.tech AI

Model-View-Intent (MVI) — это архитектурный паттерн, который помогает управлять состоянием UI через поток намерений (intents) пользователя.

В моём опыте реализации MVI в Android:

  • Intent — пользовательские действия или события, которые отправляются в систему.
  • Model — бизнес-логика и состояние, которые обрабатывают intents и формируют новый state.
  • View — отображает состояние и генерирует intents.

Например, при нажатии кнопки View отправляет Intent, Model обрабатывает его и обновляет State, который View отображает.

Это позволяет сделать UI предсказуемым и легко тестируемым.

Пример упрощённого кода:

sealed class Intent {
    object LoadData : Intent()
    data class Submit(val text: String) : Intent()
}

data class ViewState(val isLoading: Boolean, val data: String?)

class Model {
    private val state = MutableStateFlow(ViewState(false, null))

    fun process(intent: Intent) {
        when (intent) {
            is Intent.LoadData -> loadData()
            is Intent.Submit -> submitData(intent.text)
        }
    }

    private fun loadData() {
        state.value = ViewState(true, null)
        // загрузка данных
        state.value = ViewState(false, "Данные загружены")
    }

    private fun submitData(text: String) {
        // обработка отправки
    }

    fun getState(): StateFlow<ViewState> = state
}