Sie sind auf Seite 1von 24

L'architecture MVC : Modle Vue - Contrleur

Gnie Logiciel Licence 3 - Universit du Havre Bruno Mermet

Le Design Pattern1 <<Observer>>

1. voir http://users.info.unicaen.fr/~bmermet/Enseignement/CoursPDF/designPatterns.pdf

Prsentation gnrale

Objectif
Permettre un objet de prvenir un ensemble d'autres objets inconnus au moment de sa conception de certains changements de son tat

Problme

Certains changements d'tat d'un objet O sont susceptibles d'en intresser d'autres Ces autres objets sont inconnus lors de la conception de O Faire grer O une liste d'observateurs (ou couteurs) et les prvenir lors des changements d'tats intressants

Solution

Architecture gnrale
Subject + attach 1 + detach + notify coll <<interface>> * Observer + update

forall o:coll { o.update() }

Doit s'enregistrer auprs du sujet concret en appelant attach() ConcreteSubject + stateChange Dfinition concrte de la mise jour ConcreteObserver + update

appelle notify()

Architecture simplifie
ConcreteSubject + attach + detach + notify + stateChange

coll

<<interface>> * Observer + update

ConcreteObserver + update

Architecture rutilisation
ObserverSupport + attach + detach + notify

coll

<<interface>> * Observer + update

support 1

support.attach() support.detach() ConcreteObserver + update appelle support.notify()

ConcreteSubject + attach + detach + stateChange

L'architecture MVC

Principe gnral

But

Isoler la donne elle-mme de sa prsentation Distinguer la consultation de la modification

Principe
Les 3 composantes suivantes d'une donne sont distingues et spares

Le modle (sa structure) La vue (sa reprsentation pour affichage) Le contrleur (les moyens de modifier la valeur)

Le modle

Rle

Encapsuler les proprits d'une donne tre indpendant des vues et contrleurs Dfinir les accesseurs aux proprits de cette donne Maintenir une liste d'couteurs (vues et contrleurs se dclarent comme couteurs) Prvenir les couteurs lorsque la donne est modifie Implantation du design pattern Observer

Consquences

La vue

Rle

Reprsenter la donne encapsule via un modle Se maintenir jour lorsque le modle est modifi Doit s'enregistrer comme couteur au niveau du modle

Consquences

Le contrleur

Rle

Permettre l'utilisateur de modifier la donne encapsule dans le modle Doit ventuellement s'enregistrer comme couteur du modle pour tre mis jour si le modle est modifi Doit appeler les accesseurs du modle en fonction des actions de l'utilisateur

Consquences

MVC et Swing

Architecture gnrale
Communication indirecte modle Communication directe

Vue

Contrleur

Architecture swing : vue et contrleurs fusionns


Communication indirecte modle Communication directe

Vue/Contrleur

Exemple de mise en oeuvre : Les <<boutons>> Swing


Container Component

JComponent

Object

AbstractButton

DefaultButtonModel

JButton

<<Interface>> ButtonModel

<<Interface>> ItemSelectable

Exemple de mise en oeuvre : L'interface ButtonModel


getSelectedObject
addItemListener removeItemListener addActionListener removeActionListener addChangeListener removeChangeListener

getActionCommand setActionCommand getMnemonic setMnemonic isArmed isEnabled isPressed isRollOver isSelected setArmed setEnabled setPressed setRollOver setSelected

Exemple de mise en oeuvre : La classe JButton (extrait)


addActionListener removeActionListener fireActionPerformed addChangeListener removeChangeListener fireStateChanged addItemListener removeItemListener fireItemStateChanged getIcon getText getLabel getFont paint isSelected isEnabled setIcon setText setLabel setFont repaint setSelected setEnabled

update

MVC et Swing Look-and-feel : principes

Apparence personnalisable ("look and feel")

Affichage d'un composant dlgu une autre classe ("UI delegate") Exemple
Pour un bouton JButton, affichage dlgu une sous-classe de ButtonUI, comme MetalButtonUI

Implantation

Classes UI transparentes si on ne s'y intresse pas

Une telle classe est construite par dfaut par l'UIManager

Le bouton JButton est un observateur de ce que dtecte le ButtonUI et retransmet les infos ses propres couteurs

MVC et Swing Look-and-feel : architecture


Container ComponentUI JComponent ButtonUI AbstractButton BasicButtonUI MetalButtonUI JButton <<Interface>> ItemSelectable DefaultButtonModel <<Interface>> ButtonModel Object Component

MVC et applications web

MVC1

Modle

Les donnes (Java Beans) La page web/JSP Une servlet de contrle qui

Vue

Contrleur

Traite l'info de la page source en modifiant les donnes si ncessaire Affiche la nouvelle page

La vue sert configurer le contrle

MVC1 : exemple
Vue1 Vue2 Vue1 Vue3 Vue1 Vue4

Contrle1

Contrle2

Contrle3

Modle1

Modle2

Modle3

Du MVC1 au MVC2

Inconvnient MVC1 :Multiplication du nombre de Servlets


Lourdeur de dclaration au niveau du Serveur d'Application Mises jour peu aises

Modle MVC2

Une seule Servlet de contrle servant d'aiguillage et l'architecture simple :


switch(pageSource) {
case page1 : pageSuite=traitement1();afficher(pageSuite);break; case page2 : pageSuite=traitement2();afficher(pageSuite);break; ...

En pratique : une classe par traitement

MVC2 : exemple
Vue1 Vue2 Vue1 Vue3 Vue1 Vue4

Contrleur <<interface>> 1..* Traitement

Vue traitement(Requte r)

Traitement1

Traitement2

Traitement3

Modle1

Modle2

Modle3

Das könnte Ihnen auch gefallen