MVI - Kasimashi/Systemes-embarques GitHub Wiki
Architecture MVI (Model - View - Intent)
L’architecture MVI est un modèle de conception utilisé surtout dans les applications réactives (mobile ou web).
Elle vise à rendre l’état de l’application prévisible en adoptant un flux de données unidirectionnel et basé sur des intentions (Intents).
1. Model (État)
Le Model représente l’état de l’application à un moment donné.
Rôle :
- Contenir toutes les données nécessaires à la View
- Être immutable (chaque modification produit un nouvel état)
- Représenter l’état complet de l’interface
Exemple :
UserListStateavec :isLoadinguserserror
2. View (Vue)
La View affiche l’état du Model et déclenche des intents selon les actions utilisateur.
Rôle :
- Observer l’état du Model
- Mettre à jour l’interface en fonction de l’état
- Envoyer les intentions (actions utilisateur) au Presenter/IntentHandler
Exemple :
- Bouton “Rafraîchir la liste”
- Zone d’affichage des utilisateurs ou des erreurs
3. Intent (Intention)
L’Intent capture les actions ou événements utilisateur et les transforme en changements d’état.
Rôle :
- Recevoir les actions utilisateur
- Définir ce que l’on veut faire (“charger les utilisateurs”, “supprimer un élément”)
- Envoyer ces intentions au Reducer ou à la logique qui mettra à jour le Model
Exemple :
LoadUsersIntentDeleteUserIntent
4. Flux unidirectionnel
- La View déclenche une Intent (action utilisateur)
- L’Intent est traitée pour produire un nouvel état du Model
- La View observe le Model et se met à jour automatiquement
- Cycle répété à chaque interaction utilisateur
Différences clés avec MVC/MVP/MVVM
- Flux de données unidirectionnel et prévisible
- Le Model représente l’état complet plutôt que juste les données
- La View ne modifie jamais directement le Model
- Adapté aux architectures réactives et frameworks comme RxJava, Redux, Jetpack Compose
Avantages
- État de l’application toujours prévisible
- Synchronisation automatique entre état et interface
- Facile à tester et déboguer
- Convient aux interfaces complexes et interactives
Exemple concret
Dans une application mobile :
- Model :
UserListState{ isLoading, users, error } - View : affiche la liste des utilisateurs et le spinner
- Intent : action “charger la liste des utilisateurs”
- Flow : Intent → traitement → nouvel état → View mise à jour
En résumé :
MVI organise les applications autour de l’état immuable, des intentions utilisateur, et d’un flux unidirectionnel, garantissant que l’interface reflète toujours l’état actuel de manière prévisible.