Sobes.tech
Junior — Middle

Meséljen az MVI architektúrális mintának való megfelelés tapasztalatáról.

sobes.tech MI

Válasz az MI-től

Model-View-Intent (MVI) — egy architekturális minta, amely segít az UI állapotának kezelésében a felhasználói szándékok (intents) áramlásán keresztül.

Tapasztalatom szerint az MVI Androidon való megvalósításakor:

  • Intent — a rendszerbe küldött felhasználói műveletek vagy események.
  • Model — üzleti logika és állapot, amelyek feldolgozzák az intents és új állapotot alkotnak.
  • View — megjeleníti az állapotot és generál intents.

Például, egy gomb megnyomásakor a View küld egy Intentet, a Model feldolgozza azt és frissíti az Állapotot, amit a View megjelenít.

Ez lehetővé teszi az UI előrejelezhetőségét és könnyű tesztelhetőségét.

Egyszerűsített kód példa:

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)
        // adatok betöltése
        state.value = ViewState(false, "Adatok betöltve")
    }

    private fun submitData(text: String) {
        // küldés feldolgozása
    }

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