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.