Junior
Pověz mi o vzoru MVVM.
sobes.tech AI
Odpověď od AI
Model-View-ViewModel (MVVM) je architektonický vzor, který odděluje uživatelské rozhraní (View) od obchodní logiky (Model) pomocí prostředníka: ViewModel.
- Model: Reprezentuje data a obchodní logiku aplikace. Neobsahuje žádnou UI-specifickou logiku.
- View: Zobrazuje data z ViewModel a odesílá akce uživatele (například stisknutí tlačítek) do ViewModel. Neobsahuje obchodní logiku, pouze logiku zobrazení.
- ViewModel: Funguje jako spojovací článek. Poskytuje data z Modelu ve vhodném formátu pro zobrazení a zpracovává požadavky z View, aktualizuje Model. Obsahuje logiku zobrazení, ale přímo ne manipulujte s View. Často používá LiveData nebo StateFlow pro reaktivní aktualizace.
Výhody:
- Oddělení odpovědností: Zlepšuje čitelnost a udržovatelnost kódu.
- Testovatelnost: ViewModel je snadno testovatelný v izolaci, protože nezávisí na Android API.
- Podpora životního cyklu: ViewModel přežije změny konfigurace (například otočení obrazovky) a vyhýbá se opětovnému načítání dat.
- Vylepšená modularita.
Příklad struktury:
// Model (příklad repozitáře)
class UserRepository {
fun getUsers(): List<User> {
// ... logika získávání uživatelů ...
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() // Použití delegáta od Android KTX
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// Aktualizace UI (například adaptér RecyclerView)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Logika aktualizace TextView, RecyclerView atd.
}
}