Sobes.tech
Junior — Middle

Papaskinkite apie savo patirtį įgyvendinant architektūros modelį Model-View-Intent (MVI).

sobes.tech AI

Atsakymas iš AI

Model-View-Intent (MVI) — tai architektūros šablonas, kuris padeda valdyti vartotojo sąsajos būseną per vartotojo ketinimų (intents) srautą.

Iš mano patirties įgyvendinant MVI Android platformoje:

  • Intent — vartotojo veiksmai ar įvykiai, kurie siunčiami sistemai.
  • Model — verslo logika ir būsenos, kurios apdoroja intents ir sukuria naują būseną.
  • View — rodo būseną ir generuoja intents.

Pavyzdžiui, paspaudus mygtuką, View siunčia Intent, Model jį apdoroja ir atnaujina būseną, kurią View rodo.

Tai leidžia UI būti prognozuojamam ir lengvai testuojamam.

Supaprastintas kodo pavyzdys:

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)
        // duomenų įkėlimas
        state.value = ViewState(false, "Duomenys įkelti")
    }

    private fun submitData(text: String) {
        // siuntimo apdorojimas
    }

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