Bonjour à tous et à toutes,
J'essaye de me faire une petite synthèse de ce que je crois avoir compris
du MODELE MVC standard, pourriez-vous me dire si j'ai bien compris, si ce que je dis est juste , si je n'oublie rien,
MERCI beaucoup pour votre aide et vos critiques .
LES ROLES:
- LE MODELE:
. Représenter et encapsuler les données d'une LOGIQUE METIER et offrir
à l'extérieur des moyens de lire et d'en modifier certaines.
- LA VUE:
. Permettre à l'utilisateur d'avoir une représentation VISUELLE du
MODELE ou d'une partie du MODELE, la plus à jour possible.
Une VUE est donc spécifique à un MODELE donné.
.Permettre à l'utilisateur d'interagir avec le MODELE
(Demandes de: modif, ajout, suppr, visu)
- LE CONTROLEUR:
. Recevoir les Demandes de l'utilisateur que lui transmet donc la VUE, les
interpréter vis-à-vis du MODELE, les filtrer, les contrôler.
. Demander au MODELE de se mettre à jour (modif, ajout, suppr).
. Implémenter la LOGIQUE graphique de la VUE: griser tel widget si tel autre
... .
MISE EN OEUVRE
- LE MODELE:
. Le MODELE est observable directement par une ou plusieurs
VUES. Dans les faits, les VUES sont les seules observatrices du MODELE.
. Le MODELE sait qu'il peut avoir des observateurs pour chacune de ses
propriétés. Il gère donc une liste d'observateurs par propriété X qu'il
possède(et souhaite rendre lisible), il possède donc autant de méthodes :
.notifyObservers_DeLaProprieteX()
.addObserver_DeLaProprieteX( IObserver_ProprieteX objet)
.removeObserver_DeLaProprieteX( IObserver_ProprieteX objet)
.Les observateurs d'une propriété X devront s'enregistrer en tant que tel
auprès du MODELE en faisant un appel du syle:
this.modele.addObserver_DeLaProprieteX( this ).
Et ces observateurs-ci devront donc implémenter une interface
IObserver_ProprieteX contenant une méthode
updateWidget_PourLaProprieteX(), que la méthode
notifyObservers_DeLaProprieteX() du MODELE pourra alors appeler
pour leur signifier le changement de sa ProprieteX.
.Le MODELE implémente une interface genre IModele_get contenant des
méthodes de lecture du MODELE (get()), permettant ainsi à un
observateur de l'interroger, par exemple:
(vue.widgetPourProprieteX.value=vue.modele.getProprieteX()...)
.Le MODELE implémente une interface genre IModele_set contenant des
méthodes d'écriture sur le MODELE (add(), set(), del()),
permettant ainsi au CONTROLEUR(uniquement) de
pouvoir le modifier directement.
- LA VUE:
.La VUE sait mettre à jour toute seule ses champs par simple appel
direct des méthodes get() que le MODELE met à disposition de ses
observateurs (le modele implémentant IModele_get).
La VUE voit le MODELE uniquement comme étant de type IModele_get.
La VUE ne peut ainsi que CONSULTER le MODELE (pas de modif!).
La VUE se met à jour, soit pour initialiser le contenu de ses champs,
soit sous sollicitation du MODELE qui l'informe d'un changement des
données qui la concerne (et donc pour lesquelles la VUE s'était enregistrée
en tant qu'observatrice).
.La VUE implémente une interface IObserver_ProprieteX pour chaque
propriété X du MODELE qu'elle souhaite observer.
La VUE possède donc une méthode updateWidget_PourLaProprieteX()
que son MODELE invoquera pour signifier le changement de la propriété X.
Mais la VUE peut elle même, au moment de l'initialisation de ses champs,
faire appel à sa méthode updateWidget_PourLaProprieteX() pour initialiser
la valeur contenu dans le Widget représentant visuellement la propriété X.
.La VUE connait le CONTROLEUR, et pour elle le CONTROLEUR est de
type IController (interface que devra implémenter le CONTROLEUR
concret). Cette interface contient des méthodes que la VUE invoquera
suite à une action de l'utilisateur. La VUE pourra ainsi dire à SON
CONTROLEUR que l'utilisateur demande telle modif. sur le MODELE:
this.controller.demandeModif_ProprieteX().
.La VUE peut également implémenter une interface IVUE
qui permettra à son CONTROLEUR de la mettre à jour d'un point de vue
LOGIQUE graphique: griser , rendre (in)visible, tel widget, etc... .
Ainsi le VUE pourra par exemple posséder une méthode
setWidget1_visibility(boolean).
- LE CONTROLEUR:
. Implémente une interface IController, permettant d'offrir des méthodes
à la VUE pour qu'elle puisse transmettre au CONTROLEUR les demandes
de l'utilisateur.
. Pour le CONTROLEUR, la VUE est de type IVUE, à savoir elle implémente
l'interface IVUE, il peut donc agir sur la LOGIQUE graphique de cette
dernière: par exemple, this.vue.setWidget1_color( errorColor ) .
. Pour le CONTROLEUR, le MODELE est de type IModele_set, à savoir que
ce dernier implémente IModele_set (un ensemble de méthodes que le
MODELE met à dispo. pour qu'on puisse le mettre à jour).
Le CONTROLEUR peut donc ordonner des modifs sur le MODELE:
this.modele.setProprieteX( newValue ) .
. Le CONTROLEUR n'a pas besoin de lire le MODELE ....?
Il se contente juste de le mettre à jour car c'est la VUE qui interrogera
le MODELE .
Voilà j'espère que je n'ai rien oublié de ce que j'en pense .
MERCI beaucoup pour votre participation, vos remarques et critiques.
Partager