Junior
Реци о патерну MVVM.
sobes.tech АИ
Одговор од АИ
Model-View-ViewModel (MVVM) je arhitektonski obrazac koji odvojeno prikazuje korisnički interfejs (View) od poslovne logike (Model) pomoću posrednika: ViewModel.
- Model: Predstavlja podatke i poslovnu logiku aplikacije. Ne sadrži UI-specifičnu logiku.
- View: Prikazuje podatke iz ViewModel-a i šalje akcije korisnika (npr. pritiske na dugmad) u ViewModel. Ne sadrži poslovnu logiku, samo logiku prikaza.
- ViewModel: Funkcioniše kao veza. Pruža podatke iz Modela u formatu pogodan za prikaz i obrađuje zahteve od View-a, ažurirajući Model. Sadrži logiku prikaza, ali ne manipuliše direktno sa View-om. Često koristi LiveData ili StateFlow za reaktivna ažuriranja.
Prednosti:
- Razdvajanje odgovornosti: Poboljšava čitljivost i održavanje koda.
- Testabilnost: ViewModel je lako testirati izolovano, jer ne zavisi od Android API-ja.
- Podrška za životni ciklus: ViewModel preživljava promene konfiguracije (npr. rotacija ekrana) i izbegava ponovno dobijanje podataka.
- Poboljšana modularnost.
Primer strukture:
// Model (primer repozitorijuma)
class UserRepository {
fun getUsers(): List<User> {
// ... logika za dobijanje korisnika ...
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() // Korišćenje delegata od Android KTX
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// Ažuriranje UI (npr. RecyclerView adapter)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Logika za ažuriranje TextView, RecyclerView itd.
}
}