Sobes.tech
Junior

MV үлгүлөрү эмнелер?

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ди жаңыртат.

Көбүрөөк бөлүнүү жана тестирлөө мүмкүнчүлүгүн камсыз кылат.

// MVPдеги View интерфейси мисалы
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("Failed to load user")
            }
        }
    }
}

MVVM (Model-View-ViewModel)

  • Model: маалыматтарды жана бизнес-логиканы көрсөтөт, өзгөрүүлөр тууралуу билдирүү үчүн Observable колдонулат.
  • View: ViewModelден алынган маалыматтарды көрсөтөт жана колдонуучу аракеттерин өткөрөт, databinding колдонулат View жана ViewModel байланышын камсыз кылуу үчүн.
  • ViewModel: View үчүн ыңгайлуу форматта маалыматтарды камсыздайт, көрүүнүн логикасын камтыйт, түздөн-түз Viewге кирүү мүмкүнчүлүгү жок.

LiveData, Flow сыяктуу байкоочулар механизмдери жана databinding колдонулат автоматтык түрдө View жаңыртуу үчүн. ViewModel Android фреймворкынан толук көз каранды эмес жана жакшы тестирлөө мүмкүнчүлүгүн камсыздайт.

// LiveData менен ViewModel мисалы
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 = "Failed to load user"
            }
        }
    }
}

Салыштыруу:

Паттерн View жана Логика байланышы Логиканы тестирлөө Логиканын Androidга көзкарандысыздыгы
MVC тыгыз (Android View көбүнчө Controller) орто жогору
MVP эркин (интерфейс аркылуу View) жогору төмөн (Presenter Android UI-га көзкаранды эмес)
MVVM эркин (байкоочулар жана databinding аркылуу) жогору жок (ViewModel Android UI-га көзкаранды эмес)

Паттерн тандоо долбоордун талаптарына жана команданын артыкчылыктарына көз каранды. MVVM жана Android Jetpack компоненттери (ViewModel, LiveData, Data Binding) колдонуу — заманбап Android өнүктүрүүнүн сунушталган ыкмасы.