🧭 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 :

  • onLoginClicked
  • onUsernameChanged
  • onSplashCompleted

Info

Le ViewModel reçoit une UI Action, exécute la logique, puis met à jour le State.


đŸ§Ÿ RĂ©sumĂ© de la communication

ConceptRĂŽleDirectionExemple
UI StateDĂ©crit ce qu’il faut afficherViewModel → ScreenisLoading = true
UI ActionInforme d’une interaction utilisateurScreen → ViewModelClic « 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

  1. Le Screen s’affiche.
  2. Le ViewModel démarre une tùche (ex : timer, fetch, initialisation).
  3. Une fois terminé, il met à jour le State (isLoading = false).
  4. 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 errorMessage existe
  • 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’écranPeut ĂȘtre rĂ©utilisĂ© sur plusieurs Ă©crans
Exemple : loader, erreurs temporairesExemple : 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

  • MVVM Android
  • StateFlow & coroutines
  • LiveData (moins moderne mais encore rĂ©pandu)
  • Navigation Component

🌍 Explore More


📚 Tags

kotlin android viewmodel mvvm architecture