Junior
MVVM nümunəsi haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
Model-Görünüm-Model Görünüm (MVVM) memarlıq nümunəsidir və istifadəçi interfeysini (View) biznes məntiqindən (Model) ayırır və vasitəçi kimi ViewModel-dən istifadə edir.
- Model: Tətbiqin məlumatlarını və biznes məntiqini təmsil edir. UI-ə xüsusi məntiqi ehtiva etmir.
- View: ViewModel-dən məlumatları göstərir və istifadəçi fəaliyyətlərini (məsələn, düymə basmaları) ViewModel-ə göndərir. Biznes məntiqi ehtiva etmir, yalnız təqdimat məntiqi.
- ViewModel: Bağlantı rolunu oynayır. Model-dən məlumatları istifadə üçün uyğun formata təqdim edir və View-dən gələn sorğuları işləyir, Model-i yeniləyir. Təqdimat məntiqini ehtiva edir, lakin birbaşa View ilə manipulyasiya etmir. Tez-tez LiveData və ya StateFlow istifadə edir.
Üstünlüklər:
- Məsuliyyətlərin bölünməsi: Kodun oxunaqlığını və saxlanmasını yaxşılaşdırır.
- Test ediləbilənlik: ViewModel Android API-dən asılı olmadığı üçün asanlıqla test edilə bilər.
- Həyat dövrü dəstəyi: ViewModel konfiqurasiya dəyişikliklərindən (məsələn, ekranın döndürülməsi) sonra da sağ qalır və məlumatların yenidən alınmasını qarşısını alır.
- Modulluluğun yaxşılaşdırılması.
Nümunə strukturu:
// Model (nümunə depo)
class UserRepository {
fun getUsers(): List<User> {
// ... istifadəçiləri alma məntiqi ...
return listOf(User("Alice"), User("Bob"))
}
}
// ViewModel
class UserViewModel(private val repository: UserRepository) : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
init {
loadUsers()
}
private fun loadUsers() {
_users.value = repository.getUsers()
}
}
// View (Fragment/Activity)
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels() // Android KTX delegatı istifadə olunur
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// UI-ni yeniləyin (məsələn, RecyclerView adapter)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// TextView, RecyclerView və s. yeniləmə məntiqi
}
}