Sobes.tech
Junior

MV shablonlari nima?

sobes.tech AI

AIdan javob

MV naqshlari (Model-View-ViewModel, Model-View-Presenter, Model-View-Controller) arxitektura naqshlaridir va ko'rinish (View), biznes mantiq (Model) va taqdimot mantiqini (ViewModel/Presenter) ajratadi. Maqsad - mas'uliyatlarni ajratish orqali ilovaning texnik xizmat ko'rsatish, test qilish va kengaytirishni yaxshilash.

MVC (Model-View-Controller)

  • Model: Ma'lumotlar va biznes mantiqini ifodalaydi.
  • View: Model'dan ma'lumotlarni ko'rsatadi.
  • Controller: Foydalanuvchi harakatlarini ishlov beradi, Model'ni yangilaydi va ko'rsatish uchun View'ni tanlaydi.

Androidda View (faoliyat/fragment) ko'pincha View va Controller funksiyalarini birlashtiradi, bu esa test qilishni qiyinlashtiradi.

MVP (Model-View-Presenter)

  • Model: Ma'lumotlar va biznes mantiqini ifodalaydi.
  • View: Passiv interfeys bo'lib, Presenter tomonidan yuborilgan ma'lumotlarni ko'rsatadi va foydalanuvchi harakatlarini uzatadi.
  • Presenter: Taqdimot mantiqini o'z ichiga oladi, Model bilan o'zaro aloqada bo'ladi va interfeys orqali View'ni yangilaydi.

View va mantiq o'rtasida yaxshiroq ajratishni ta'minlaydi, Presenter'ni test qilishni osonlashtiradi.

// MVP'da View interfeysining misoli
interface UserProfileView {
    fun showLoading()
    fun hideLoading()
    fun displayUserInfo(user: User)
    fun showError(message: String)
}

// Presenter misoli
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("Foydalanuvchi yuklanmadi")
            }
        }
    }
}

MVVM (Model-View-ViewModel)

  • Model: Ma'lumotlar va biznes mantiqini ifodalaydi. O'zgarishlar haqida bildirish uchun Observable'dan foydalanadi.
  • View: ViewModel'dan ma'lumotlarni ko'rsatadi va foydalanuvchi harakatlarini yuboradi. Data binding yordamida View va ViewModel'ni bog'laydi.
  • ViewModel: View uchun ma'lumotlarni qulay formatda taqdim etadi, taqdimot mantiqini o'z ichiga oladi. To'g'ridan-to'g'ri View'ga kirishmaydi.

Kuzatuvchilar (LiveData, Flow) va data binding mexanizmlari yordamida, ViewModel'dagi ma'lumotlar o'zgarganda, View avtomatik ravishda yangilanadi. ViewModel Android-ramkasidan to'liq mustaqil bo'lib, test qilish oson.

// LiveData bilan ViewModel misoli
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 = "Foydalanuvchi yuklanmadi"
            }
        }
    }
}

Taqqoslash:

Pattern View va Logika o'rtasidagi bog'lanish Logika test qilinishi Android-ning logikaga ta'siri
MVC Kuchli (Androidda View ko'pincha Controller) O'rtacha Yuqori
MVP Erkin (interfeys orqali) Yuqori Past (Presenter Android UI'dan mustaqil)
MVVM Erkin (observatorlar va data binding orqali) Yuqori Yo'q (ViewModel Android UI'dan mustaqil)

Pattern tanlovi loyiha talablari va jamoa afzalliklariga bog'liq. Zamonaviy Android rivojlanishida, Android Jetpack komponentlari (ViewModel, LiveData, Data Binding) bilan MVVM tavsiya etiladi.