Sobes.tech
Junior — Middle

MVP və MVI memarlıq nümunələri arasındakı fərqləri izah edə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

MVP (Model-Görünüm-Presentor) və MVI (Model-Görünüm-Niyyət) memarlıq nümunələri, Android daxil olmaqla tətbiqlərdə kodun təşkili üçün istifadə olunan arxitektura nümunələridir, lakin onlar vəziyyətin idarə olunması və komponentlərin qarşılıqlı əlaqəsi baxımından fərqli yanaşmalara malikdir.

MVP:

  • Görünüm istifadəçi ilə qarşılıqlı əlaqə və göstərmə üçün cavabdehdir.
  • Presentor məntiqi ehtiva edir, istifadəçi fəaliyyətlərini işləyir, Görünümü yeniləyir.
  • Model məlumatlar və biznes məntiqini təmsil edir.
  • Presentor birbaşa Görünümü yeniləyir, çox vaxt interfeys vasitəsilə.

MVI:

  • Görünüm istifadəçi niyyətlərini (Intent) yaradır.
  • Intentlər Modelə göndərilir, onlar işlənir və yeni vəziyyət (State) ilə geri qaytarılır.
  • Görünüm vəziyyət axınına abunə olur və ona əsasən yenilənir.
  • Bir istiqamətli məlumat axını memarlığı, vəziyyətin idarə olunmasını sadələşdirir və proqnozlaşdırıla bilən edir.

Əsas fərq: MVP Görünüm və Presentor arasında ikitərəfli qarşılıqlı əlaqə istifadə edir, MVI isə dəyişməz vəziyyətlə bir istiqamətli məlumat axını təmin edir, bu da debugging və testləri asanlaşdırır.

Kotlin-də sadələşdirilmiş MVI nümunəsi:

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 = "Yüklənmiş məlumatlar", isLoading = false)
        }
    }
}