Sobes.tech
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
    }
}