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.
| Meyar | MVP | MVVM | MVI |
|---|---|---|---|
| UI ilə əlaqə | İkitərəfli (interfeys çağırışları) | Tək istiqamətli (state axını) | Tam dövrə: Intent → State → UI |
| State harada | Presenter + View arasında dağınıq | ViewModel-də (bir neçə axın ola bilər) | Tək immutable state obyekti |
| Zəif tərəfi | Boilerplate, 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
UiStatedata 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
- App architecture bələdçisirəsmideveloper.android.com
- UI layer və UDFrəsmideveloper.android.com