Junior
Parlez-moi du modèle MVVM.
sobes.tech IA
Réponse de l'IA
Le modèle-Vue-ViewModel (MVVM) est un patron architectural qui sépare l'interface utilisateur (Vue) de la logique métier (Modèle) à l'aide d'un intermédiaire : le ViewModel.
- Modèle : Représente les données et la logique métier de l'application. Ne contient aucune logique spécifique à l'UI.
- Vue : Affiche les données du ViewModel et envoie les actions de l'utilisateur (par exemple, clics sur des boutons) au ViewModel. Ne contient pas de logique métier, seulement la logique d'affichage.
- ViewModel : Sert de lien. Fournit les données du Modèle à la Vue dans un format adapté à l'affichage et traite les requêtes de la Vue, en mettant à jour le Modèle. Contient la logique de présentation, mais ne manipule pas directement la Vue. Utilise souvent LiveData ou StateFlow pour des mises à jour réactives.
Avantages :
- Séparation des responsabilités : Améliore la lisibilité et la maintenabilité du code.
- Testabilité : Le ViewModel est facile à tester isolément, car il ne dépend pas de l'API Android.
- Support de la survie : Le ViewModel survit aux changements de configuration (par exemple, rotation de l'écran) et évite de recharger les données.
- Modularité améliorée.
Exemple de structure :
// Modèle (exemple de dépôt)
class UserRepository {
fun getUsers(): List<User> {
// ... logique pour obtenir des utilisateurs ...
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()
}
}
// Vue (Fragment/Activity)
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels() // Utilisation du délégué Android KTX
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// Mise à jour de l'UI (par exemple, adapter RecyclerView)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Logique de mise à jour TextView, RecyclerView, etc.
}
}