Sobes.tech
Junior — Middle

Оё метавонед фарқият байни намунаҳои меъмории MVP ва MVI-ро шарҳ диҳед?

sobes.tech AI

Ҷавоб аз AI

МVP (Модел-Вижн-Представител) ва MVI (Модел-Вижн-Ният) архитектурӣ намунаҳо мебошанд, ки барои ташкил кардани коди дар барномаҳо, махсусан дар Android, истифода мешаванд, аммо онҳо ба роҳҳои гуногун дар идоракунии ҳолат ва ҳамкории компонентҳо мебошанд.

MVP:

  • Вижн масъул барои намоиш ва ҳамкории бо корбар мебошад.
  • Предсталет дорои логика мебошад, амалҳои корбарро коркард мекунад, Вижнро навсозӣ мекунад.
  • Модел маълумот ва логикаи бизнесро намояндагӣ мекунад.
  • Предсталет мустақиман Вижнро навсозӣ мекунад, аксар вақт тавассути интерфейсҳо.

MVI:

  • Вижн Ниятҳоро (Intent) тавлид мекунад.
  • Ниятҳо ба Модел фиристода мешаванд, ки онҳоро коркард мекунад ва ҳолати нав (State) бармегардонад.
  • Вижн ба ҷараёни ҳолатҳо обуна мешавад ва бар асоси онҳо навсозӣ мешавад.
  • Архитектураи ҷараёни маълумоти як самтӣ, ки идоракунии ҳолатро содда мекунад ва онро пешгӯишаванда мегардонад.

Фарқи асосӣ: MVP истифодаи ҳамкории дуҷониба байни Вижн ва Предсталетро дорад, дар ҳоле ки MVI ҷараёни маълумоти як самтӣ бо ҳолати тағирнопазирро истифода мебарад, ки ба хатоҷӯӣ ва тест кардан осонтар мекунад.

Масалан, намунаи соддашудаи MVI дар Kotlin:

sealed class Intent {
    object LoadData : Intent()
}

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

class Model {
    fun process(intent: Intent): ViewState {
        return when(intent) {
            is Intent.LoadData -> ViewState(data = "Маълумот бор карда шуд", isLoading = false)
        }
    }
}