En architecture logicielle, MVVM (Model View ViewModel) est un Design pattern (Modèle de conception) visant à séparer la logique de présentation d'une application en 3 couches
En architecture logicielle, MVVM (Model View ViewModel) est un Design pattern (Modèle de conception) visant à séparer la logique de présentation d’une application en 3 couches :
Étant un facteur important de maintenabilité, Les dépendances entre les différentes couches doivent être optimisés.
Ci dessous, une mauvaise approche de dépendance :
Ici, le ViewModel reçois les mise à jour de la View,
traîtes les données et renvois les mises à jours à la View.
Celà pose un problème car dans ce scénario, la View et le ViewModel possèdent une dépendance cyclique et un changement de la View impacterait directement le ViewModel. De plus, si plusieurs vues sont chargés de présenter ce même ViewModel, l’ensemble des ces Views devront être mises à jour par le ViewModel.
Pour éviter cette contraignante dépendance, le paterne MVVM propose une approche différente :
Le ViewModel notifie les changements qui lui sont appliqués.
De cette manière, la View est elle même responsable de se tenir informée des mise à jours du ViewModel par le biais de notifications (évènements) et de se mettre à jour au besoin.
Deux dépendances sont restantes :
La View connais donc les donnés exposées par le ViewModel et possède un accès en lecture et/ou écriture sur ces données.
La View écoute et réagit aux notifications du ViewModel.
Le ViewModel réagit aux demandes de modifications de ses donnés par les couches extérieurs et notifie les changements qu’il aura validé.
Le ViewModel sait récupérer et mettre à jours les informations du Model.
Le Data Binding est un mécanisme proposé par la majorité des framework MVVM.
Son rôle est de décrire la liaison entre un composant graphique et une donnée exposée par le ViewModel. Il permet également de simplifier l’utilisation du paterne MVVM en encapsulant la logique de communication entre la View et le ViewModel.
Par exemple, le développeur peut utiliser le Data Binding pour lier la valeur d’un champ texte à une donnée précise exposée par le ViewModel :
Dans le cas d’une modification externe de la donnée sur le ViewModel, le principe est le même :