Sparround

MVC vs MVP vs MVVM vs MVI

Bütün bu patternlərin məqsədi eynidir: UI-ı biznes məntiqindən ayırmaq ki, kod test olunsun və dəyişikliyə davamlı olsun. Fərq — UI ilə məntiq arasındakı əlaqənin formasındadır.

  • MVC — Controller inputu emal edir, Model-i yeniləyir. Android-də klassik MVC praktikada "hər şey Activity-də" halına düşürdü — buna görə az istifadə olunur.
  • MVP — Presenter View interfeysi ilə danışır (view.showBalance(...)). View passivdir. Problem: hər ekrana interfeys cütü, Presenter-in lifecycle-ı əl ilə idarə olunur.
  • MVVM — ViewModel state axını (StateFlow/LiveData) təqdim edir, View ona abunə olur. ViewModel View-u tanımır — əlaqə tək istiqamətlidir. Android-in rəsmi tövsiyəsi.
  • MVI — MVVM-in sərtləşdirilmiş forması: tək immutable state, UI-dan gələn hər şey Intent/Event, state dəyişməsi yalnız reducer-də. Unidirectional Data Flow (UDF) tam dövrə vurur.
MeyarMVPMVVMMVI
UI ilə əlaqəİkitərəfli (interfeys çağırışları)Tək istiqamətli (state axını)Tam dövrə: Intent → State → UI
State haradaPresenter + View arasında dağınıqViewModel-də (bir neçə axın ola bilər)Tək immutable state obyekti
Zəif tərəfiBoilerplate, lifecycle əl iləState bir neçə axına parçalana bilərÖyrənmə əyrisi, kiçik ekranda artıq mürəkkəblik

Müsahibədə gözlənilən dərinlik: patternləri sadalamaq yox, niyə keçid baş verdiyini izah etmək. MVP-dən MVVM-ə keçidin səbəbi: ViewModel lifecycle-ı Jetpack tərəfindən idarə olunur və view-a istinad saxlamadığı üçün leak riski yoxdur. MVVM-dən MVI-ya keçidin səbəbi: state-in tək mənbədən (single source of truth) gəlməsi race-ləri və "ekran yarısı köhnə" bug-larını aradan qaldırır.

🛠 Tapşırıq

Bir ekranı üç üslubda kağız üzərində (və ya kodda) təsvir et: MVP, MVVM, MVI.

  • Hər biri üçün "düyməyə basıldı" hadisəsinin yolunu ox-larla çək.
  • MVVM variantını real koda çevir: tək UiState data class + StateFlow.
  • Sonra eyni ViewModel-ə MVI üslubu ver: sealed interface Event + onEvent(event).

Bitdi sayılır: "MVI-nı nə vaxt seçməzdin" sualına konkret səbəb deyirsənsə.

📚 Mənbələr və sənədlər