đ§ Overview
Comprendre profondĂ©ment comment le ViewModel organise la logique, gĂšre lâĂ©tat et simplifie lâUI dans une application Android, en structurant la communication Screen â ViewModel Ă travers UI State, UI Actions et Events.
âš Features
- Séparation totale entre UI et logique métier
- Gestion robuste et prĂ©visible de lâĂ©tat
- Réduction drastique du code dans les Screens
- Communication standardisée (actions, états, événements)
- Architecture plus testable et maintenable
đ Getting Started
đŹ Introduction
La complexitĂ© arrive vite dans un Ă©cran Android : callbacks, Ă©tats, affichages conditionnelsâŠ
Le ViewModel agit comme un pivot central : il absorbe lâensemble de la logique et ne laisse Ă lâUI que lâaffichage.
Ce modĂšle rend la structure trĂšs lisible et limite lâapparition dâun âĂ©cran fourre-toutâ.
đïž 1. Le RĂŽle Central du ViewModel
Le ViewModel sépare clairement présentation et logique. Il prend le contrÎle de trois aspects essentiels :
Responsabilités du ViewModel
1. Gestion de lâĂ©tat (UI State)
- ReprĂ©sente exactement ce que lâutilisateur voit.
- Peut inclure : isLoading, messages dâerreur, liste de donnĂ©es, etc.
2. Gestion de la logique métier
- Appels API
- Initialisation (services, données)
- Transformation interne
3. Gestion des actions utilisateurs
- Clics
- Saisies
- ĂvĂ©nements de cycle de vie
Tip
Le Screen ne fait rien dâautre que lire le State et envoyer des Actions.
đ 2. Communication entre Screen et ViewModel
đ 2.1 UI State â La Source de VĂ©ritĂ©
Le State dĂ©crit lâĂ©cran Ă un instant donnĂ©.
Le Screen ne modifie jamais le State : il lâobserve seulement.
Exemple
Si
isLoading = true, le Screen affiche un loader.
Aucun calcul dans lâUI, juste une lecture.
đ 2.2 UI Action â Le Messager
Les actions reprĂ©sentent ce que lâutilisateur fait.
Exemples dâactions :
onLoginClickedonUsernameChangedonSplashCompleted
Info
Le ViewModel reçoit une UI Action, exécute la logique, puis met à jour le State.
đ§Ÿ RĂ©sumĂ© de la communication
| Concept | RĂŽle | Direction | Exemple |
|---|---|---|---|
| UI State | DĂ©crit ce quâil faut afficher | ViewModel â Screen | isLoading = true |
| UI Action | Informe dâune interaction utilisateur | Screen â ViewModel | Clic « Connexion » |
đ§Ș 3. Mise en Pratique : Deux Exemples Concrets
3.1 Exemple 1 : Splash Screen â Le Pilote Automatique
Le Splash Screen est simple : aucune interaction.
Processus complet :
Steps
- Le Screen sâaffiche.
- Le ViewModel démarre une tùche (ex : timer, fetch, initialisation).
- Une fois terminé, il met à jour le State (
isLoading = false).- Il dĂ©clenche une navigation vers lâĂ©cran suivant.
Note
Le Screen reste entiĂšrement passif. Il attend que le ViewModel dicte la suite.
3.2 Exemple 2 : Login â Interaction + Logique
Cet écran illustre parfaitement la séparation logique/UI.
Ce que gĂšre le ViewModel :
- Validation automatique (ex : bouton actif si texte â„ 3 caractĂšres)
- Gestion du clic âConnexionâ via une UI Action
- Passage en mode chargement
- Appel API
- Mise Ă jour du State (succĂšs ou erreur)
- Navigation en cas de succĂšs
Le Screen :
- affiche un loader quand
isLoading = true - affiche un message si
errorMessageexiste - active/dĂ©sactive le bouton selon lâĂ©tat
- ne contient aucune logique de validation ou de réseau
đ§© 4. Bonne Pratique : LâInterface Contrat
Le Contrat regroupe :
- Le State (tout ce que lâUI doit afficher)
- Les Actions (tout ce que lâutilisateur peut faire)
- Les Events (navigation, feedback unique)
Tip
Centraliser un Contrat rend le Screen et le ViewModel cohérents et lisibles.
đ Pourquoi Interface vs Data Class ?
| Interface (State éphémÚre) | Data Class (State persistant) |
|---|---|
| DurĂ©e de vie limitĂ©e Ă lâĂ©cran | Peut ĂȘtre rĂ©utilisĂ© sur plusieurs Ă©crans |
| Exemple : loader, erreurs temporaires | Exemple : token, identifiants, données globales |
Le choix dépend de la portée des données.
đ Conclusion
Adopter le ViewModel permet :
Bénéfices Clés
- UI claire et minimaliste
- Logique bien isolée
- Code plus lisible
- Tests plus simples
- Maintenance beaucoup plus facile
La comprĂ©hension devient complĂšte lorsquâon lâapplique.
NâhĂ©sitez pas Ă structurer vos prochains Ă©crans autour du trio State + Actions + ViewModel.
âïž Customization and Configuration
- Définir systématiquement :
- une interface de State
- une interface dâActions
- un ViewModel qui mappe Action â State
- Garder les Screens 100 % passifs
đ Related
- MVVM Android
- StateFlow & coroutines
- LiveData (moins moderne mais encore répandu)
- Navigation Component