Junior
Vertel over het MVVM-patroon.
sobes.tech AI
Antwoord van AI
Het Model-View-ViewModel (MVVM) is een architectuurpatroon dat de gebruikersinterface (View) scheidt van de bedrijfslogica (Model) met behulp van een tussenlaag: de ViewModel.
- Model: Vertegenwoordigt de gegevens en bedrijfslogica van de applicatie. Bevat geen UI-specifieke logica.
- View: Toont de gegevens van de ViewModel en stuurt gebruikersacties (bijvoorbeeld knopdrukken) naar de ViewModel. Bevat geen bedrijfslogica, alleen presentatie-logica.
- ViewModel: Functioneert als een schakel. Biedt gegevens uit het Model in een geschikt formaat voor de View en verwerkt verzoeken van de View door het Model bij te werken. Bevat presentatie-logica, maar manipuleert de View niet direct. Gebruikt vaak LiveData of StateFlow voor reactieve updates.
Voordelen:
- Verantwoordelijkheden scheiden: Verbetert de leesbaarheid en onderhoudbaarheid van de code.
- Testbaarheid: Het ViewModel is gemakkelijk te testen in isolatie, omdat het niet afhankelijk is van de Android API.
- Ondersteuning voor levensduur: Het ViewModel overleeft configuratiewijzigingen (bijvoorbeeld schermrotatie) en voorkomt herhaald gegevens ophalen.
- Verbeterde modulariteit.
Voorbeeldstructuur:
// Model (voorbeeld repository)
class UserRepository {
fun getUsers(): List<User> {
// ... logica voor het verkrijgen van gebruikers ...
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() // Gebruik van de Android KTX-delegaat
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// UI bijwerken (bijvoorbeeld RecyclerView adapter)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Logica voor het bijwerken van TextView, RecyclerView, enz.
}
}