Junior
Pastāsti par MVVM paraugu.
sobes.tech AI
Atbilde no AI
Modelis-Apskats-Modelis skata (MVVM) ir arhitektūras paraugs, kas atdala lietotāja saskarni (View) no biznesa loģikas (Modelis) ar starpnieka — Skata modeli (ViewModel) palīdzību.
- Modelis: pārstāv datus un lietotnes biznesa loģiku. Nesatur UI specifisku loģiku.
- Apskats: attēlo datus no ViewModel un nosūta lietotāja darbības (piemēram, pogas nospiešanu) uz ViewModel. Nesatur biznesa loģiku, tikai attēlošanas loģiku.
- ViewModel: darbojas kā saikne. Nodrošina datus no Modela lietotājam ērtā formātā un apstrādā pieprasījumus no Apskata, atjauninot Modeli. Satur attēlošanas loģiku, bet tieši nemano ar View. Bieži izmanto LiveData vai StateFlow reaktīviem atjauninājumiem.
Priekšrocības:
- Atbildības sadalījums: uzlabo koda lasāmību un uzturēšanu.
- Testējamība: ViewModel ir viegli testēt izolētā, jo tas nav atkarīgs no Android API.
- Dzīves cikla atbalsts: ViewModel izdzīvo konfigurācijas izmaiņas (piemēram, ekrāna apgriešanu) un izvairās no datu atkārtotas iegūšanas.
- Uzlabota modulāritāte.
Piemēra struktūra:
// Modelis (repositorijs piemēram)
class UserRepository {
fun getUsers(): List<User> {
// ... datu iegūšanas loģika ...
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()
}
}
// Apskats (Fragment/Activity)
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels() // Android KTX deleģāts
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// UI atjaunināšana (piemēram, RecyclerView adaptera atjaunināšana)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Teksta skatītāja, RecyclerView un citu UI elementu atjaunināšanas loģika
}
}