Sobes.tech
Junior

Мав шаблонҳо чӣ мебошанд?

sobes.tech AI

Ҷавоб аз AI

Моделҳои MV (Model-View-ViewModel, Model-View-Presenter, Model-View-Controller) намунаҳои меъмориианд, ки намоиш (View), логикаи тиҷоратӣ (Model) ва логикаи намоишро (ViewModel/Presenter) ҷудо мекунанд. Ҳадаф беҳтар кардани нигоҳдории, тестшавандагӣ ва масштабшавии барнома тавассути ҷудо кардани масъулиятҳо мебошад.

MVC (Model-View-Controller)

  • Model: Намояндаи маълумот ва логикаи тиҷоратӣ.
  • View: Маълумотро аз Model намоиш медиҳад.
  • Controller: Фаъолиятҳои корбарро коркард мекунад, Model-ро навсозӣ мекунад ва View-ро барои намоиш интихоб мекунад.

Дар Android, View (фаъолият/фрагмент) аксар вақт функсияҳои View ва Controller-ро якҷоя мекунад, ки ин тестро душвор месозад.

MVP (Model-View-Presenter)

  • Model: Намояндаи маълумот ва логикаи тиҷоратӣ.
  • View: Интерфейси бетараф, ки маълумотро, ки аз Presenter мегирад, намоиш медиҳад ва амалҳои корбарро ба он мефиристад.
  • Presenter: Мазмуни логикаи намоиш, бо Model ҳамкорӣ мекунад ва View-ро тавассути интерфейс навсозӣ мекунад.

Ин модел беҳтар ҷудо кардани View ва логика, ва Presenter-ро бештар тестшаванда мекунад.

// Намунаи интерфейси View дар MVP
interface UserProfileView {
    fun showLoading()
    fun hideLoading()
    fun displayUserInfo(user: User)
    fun showError(message: String)
}

// Намунаи Presenter
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("Намудани корбар")
            }
        }
    }
}

MVVM (Model-View-ViewModel)

  • Model: Намояндаи маълумот ва логикаи тиҷоратӣ. Аз Observable истифода мебарад барои огоҳ кардани тағирот.
  • View: Маълумотро аз ViewModel намоиш медиҳад ва амалҳои корбарро ба он мефиристад. Аз databinding барои пайваст кардани View ва ViewModel истифода мебарад.
  • ViewModel: Маълумотро барои View дар шакли қулай пешниҳод мекунад, логикаи намоишро дорад. Директан ба View дастрасӣ надорад.

Механизмҳои назорат (LiveData, Flow) ва databinding барои навсозии автоматии View истифода мешаванд, вақте ки тағирот дар Data дар ViewModel рух медиҳад. Ин модел комилан мустақил аз Android framework аст ва ба осонӣ тест карда мешавад.

// Намунаи ViewModel бо LiveData
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 = "Намудани корбар" 
            }
        }
    }
}

Мувофиқат:

Модел Вайроншавии байни View ва Логика Тестшавандагии Логика Таваррухи Логика аз Android
MVC Танг (дар Android View аксар вақт Controller аст) Миёна Висока
MVP Озод (аз тариқи интерфейс) Висока Кам (Presenter аз UI-и Android мустақил аст)
MVVM Озод (аз тариқи назоратгарон ва databinding) Висока Нест (ViewModel аз UI-и Android мустақил аст)

Интихоби модел вобаста ба талаботи лоиҳа ва афзалиятҳои гурӯҳ аст. MVVM бо истифода аз компонентҳои Jetpack (ViewModel, LiveData, Data Binding) дар рушди муосири Android тавсия мешавад.