Sobes.tech
Junior

MV şablonları nədir?

sobes.tech Süni İntellekt

AI-dan cavab

MV-naqshlar (Model-View-ViewModel, Model-View-Presenter, Model-View-Controller) memarət nümunələridir və təqdimatı (View), biznes məntiqini (Model) və təqdimat məntiqini (ViewModel/Presenter) ayırır. Məqsəd məsuliyyətlərin bölünməsi ilə tətbiqin dəstəklənməsini, test edilə bilməsini və miqyaslandırılmasını yaxşılaşdırmaqdır.

MVC (Model-View-Controller)

  • Model: Məlumatları və biznes məntiqini təmsil edir.
  • View: Model-dən məlumatları göstərir.
  • Controller: İstifadəçi fəaliyyətlərini emal edir, Model-i yeniləyir və göstərmək üçün View seçir.

Android-də View (aktivlik/parçalar) tez-tez View və Controller funksiyalarını birləşdirir, bu isə test etməyi çətinləşdirir.

MVP (Model-View-Presenter)

  • Model: Məlumatları və biznes məntiqini təmsil edir.
  • View: Passiv interfeys, Presenter tərəfindən ötürülən məlumatları göstərir və istifadəçi fəaliyyətlərini ona ötürür.
  • Presenter: Təqdimat məntiqini ehtiva edir, Model ilə qarşılıqlı əlaqə qurur və interfeys vasitəsilə View-u yeniləyir.

View və məntiq arasında daha yaxşı bölünmə təmin edir, Presenter-i daha test edilə bilən edir.

// MVP-də View interfeysinin nümunəsi
interface UserProfileView {
    fun showLoading()
    fun hideLoading()
    fun displayUserInfo(user: User)
    fun showError(message: String)
}

// Presenter nümunəsi
class UserProfilePresenter(private val view: UserProfileView, private val repository: UserRepository) {
    fun loadUserProfile(userId: String) {
        view.showLoading()
        repository.getUser(userId) { user ->
            view.hideLoading()
            if (user != null) {
                view.displayUserInfo(user)
            } else {
                view.showError("İstifadəçi yüklənməyib")
            }
        }
    }
}

MVVM (Model-View-ViewModel)

  • Model: Məlumatları və biznes məntiqini təmsil edir. Dəyişikliklər barədə bildiriş üçün Observable istifadə edir.
  • View: ViewModel-dən məlumatları göstərir və istifadəçi fəaliyyətlərini ona göndərir. View və ViewModel-i bağlamaq üçün databinding istifadə edir.
  • ViewModel: View üçün məlumatları əlverişli formatda təqdim edir, təqdimat məntiqini ehtiva edir. Birbaşa View-a daxil olmur.

Nəzarətçilər (LiveData, Flow) və databinding mexanizmlərindən istifadə edir və ViewModel-dəki məlumatlar dəyişdikdə View avtomatik yenilənir. ViewModel Android çərçivəsindən tam müstəqil olur və yaxşı test edilə bilir.

// LiveData ilə ViewModel nümunəsi
class UserProfileViewModel(private val repository: UserRepository) : ViewModel() {
    private val _user = MutableLiveData<User?>()
    val user: LiveData<User?> = _user

    private val _loading = MutableLiveData<Boolean>()
    val loading: LiveData<Boolean> = _loading

    private val _error = MutableLiveData<String?>()
    val error: LiveData<String?> = _error

    fun loadUserProfile(userId: String) {
        _loading.value = true
        repository.getUser(userId) { user ->
            _loading.value = false
            if (user != null) {
                _user.value = user
                _error.value = null
            } else {
                _user.value = null
                _error.value = "İstifadəçi yüklənməyib"
            }
        }
    }
}

Müqayisə:

Model View və Məntiq arasında əlaqə Məntiqin Test edilə bilməsi Məntiqin Android-dən asılılığı
MVC Sıkı (Android View tez-tez Controller-dir) Orta Yüksək
MVP Azad (interfeys vasitəsilə) Yüksək Aşağı (Presenter Android UI-dən asılı deyil)
MVVM Azad (gözətçilər və databinding vasitəsilə) Yüksək Yox (ViewModel Android UI-dən asılı deyil)

Model seçimi layihənin tələblərinə və komanda üstünlüklərinə bağlıdır. MVVM, Android Jetpack komponentləri (ViewModel, LiveData, Data Binding) ilə istifadə olunan tövsiyə olunan yanaşmadır.