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.