Mais conteúdo relacionado
Semelhante a Mvc (5) (20)
Mvc (5)
- 2. Module Java
Vue d’ensemble du langage Java
Le langage Java : syntaxe et sémantique
Programmation multi-tâche : les threads
Accéder aux bases de données
Composants réutilisables : le modèle MVC
Développement Client/Serveur
Présentation d’un IDE : WSAD / Forté / JBuilder
Les serveurs d’applications J2EE
Les Enterprise JavaBeans
Ré-ingénierie d’applications Java
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 2 / 31
- 3. Vue globale de MVC
“Dans le paradigme MVC l’entrée utilisateur, la
modélisation du monde extérieur, l’aspect visuel
présenté l’utilisateur sont explictement séparés et
gérés par trois types d’objet, chacun spécialisé dans
sa tâche.”
[Burbeck 92]
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 3 / 31
- 4. Buts de MVC
L ’architecture Model-View-Controller a pour objectif
d ’organiser une application interactive en séparant :
– les données
– la représentation des données
– le comportement de l ’application
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 4 / 31
- 5. Historique de MVC
Créé dans la fin des années 1970 par Trygve
Reenskaug au Xerox PARC
Applications aux GUI (Graphical User Interfaces)
Première version en 1980 utilise une sous classe pour
chaque vue à adapter au modèle
Vues en 1983 ont spécifié les messages à envoyer au
model avec des symboles
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 5 / 31
- 6. Historique de MVC (suite)
ObjectWorks en 1989 a utilisé les détenteurs de
valeurs
In 1992 VisualWorks a remplacé ObjectWorks et a
utilisé de composants de fine granularité GUI
spécifiant l’interface MVC.
Visualworks a ajouté la gestion des événements par
des controllers en 1998
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 6 / 31
- 7. Structure de MVC
Le modèle représente la structure des données dans
l ’application et les opérations spécifiques sur ces
données.
Une Vue présente les données sous une certaine
forme à l ’utilisateur, suivant un contexte
d ’exploitation.
Un Controller traduit les interactions utilisateur par des
appels de méthodes (comportement) sur le modèle et
sélectionne la vue appropriée basée sur l’état du
modèle.
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 7 / 31
- 8. Vue globale MVC
(suite)
Controllers
gèrent les
entrées de
l’utilisateur
Controller
View
Views
présentent
l’information à
l’utilisateur
Model
Models implémentent les fonctionnalités de l’application
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 8 / 31
- 9. MVC
Avantages
Structure O-O propre
Vues Multiples d’un même
modèle
Vues Synchronized
views et controllers interchangeables
Look and Feel modifiable
Framework Potentiel
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Désavantages
Complexité accrue
mise à jours potentiellement
excessive
View/Controller fortement
liés au modèle
Module UV Java
Page 9 / 31
- 13. MVC et les modèles de conception
View-Model (Observer)
View-Controller (Strategy)
View-View (Composite )
View-Controller (Factory Method)
View-View (Decorator)
Model (Adaptor)
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 13 / 31
- 14. Cas d’étude Hypothétique
Le secteur technologique ralentit, impliquent que les
dot-com s’effondrent, laissant de nombreux
programmeurs sans travail ...
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 14 / 31
- 15. McDonald’s
La décision est prise de ne pas gaspiller ce talent ...
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 15 / 31
- 16. Nouveau système pour la gestion des
commandes
Les caissiers ont besoin d’une nouvelle interface
– entrées les nouvelles commandes, récupérer l’argent
Les cuisiniers ont besoin d’une autre interface
– Visualiser les commandes, supprimer celles qui sont
réalisées
Exemples de code pour le Model, la View, le
Controller, et la manière de les intégrer.
McDonald’s utilise Java
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 16 / 31
- 17. Boot-strap
class McDonaldsViewController{
public static void main() {
//notre modèle est autonome
OrderTracker model = new OrderTracker();
//ces références dépendent du modèle
CashierGUI vc1 = new CashierGUI(model);
CashierGUI vc2 = new CashierGUI(model);
CookGUI vc3 = new CookGUI(model);
CookGUI vc4 = new CookGUI(model);
}
}
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 17 / 31
- 18. Le Modèle
import java.util.Observable;
class CommandeModele extends Observable{
Vector orders; // liste de toutes les commandes
//...CommandeModele()...
//...getCommandeIterator()...
public void ajouterCommande(Commande newOrder) {
orders.add(newOrder); //modification du modèle
setChanged(); // le modèle a changé (vecteur)
notifyObservers(); //notification globale
}
//idem avec supprimerCommande()
}
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 18 / 31
- 19. La Vue
import java.util.Observer;
class CuisineVue implements Observer{
CommandeModele model;
CuisineControleur controller;
CuisineVue(CommandeModele newModel) {
model = newModel;
model.addObserver(this);
controller = new CuisineControleur(model, this);
initialiserVue();
}
public void update(Observable changed, Object arg){
MiseAJourVue();
}
private void MiseAJourVue() {
//...model.getCommandeIterator()...
//...mettre à jour ce qui est vu à l’écran
}
}
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Création du
contrôleur
Appelée par
notifyObservers()
Module UV Java
Page 19 / 31
- 20. Le Contrôleur
import java.util.Observer;
class CuisineControleur implements Observer{
CommandeModele model;
CuisineVue view;
//liste des contrôles
JButton nextPageButton;
JButton removeButton;
CuisineControleur(CommandeModele inModel, CuisineVue inView){
model = inModel;
model.addObserver(this);
view = inView;
//...
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 20 / 31
- 21. Le Contrôleur
nextPageButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
view.pagesuivante();
}
});
removeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
model.supprimerCommande(view.getCommandeSelectionnee());
}
});
public void update(Observable changed, Object arg) {
if (model.getNombreDeCommandes() == 0)
removeButton.disable();
}
Appelée
}
par
notifyObservers()
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 21 / 31
- 22. Les Références
Le code du modèle n’inclut pas de références aux
classes GUI
L’utilisation de l’Observer permet de réaliser le
découplage
GUI font une référence au Modèle
– GUI est spécifique au Modèle
– réutilisation
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 22 / 31
- 23. Le Modèle
Nécessite d’être orienté métier pour supporter le
couplage des vues et des controllers
Ne doit jamais contenir des informations concernant
l’état de la GUI
Ne doit pas proposer de services spécifiques à des
vues particulières et à des controllers
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 23 / 31
- 25. La classe Observable (java.util)
Cette classe représente un objet observable par
d ’autres, au niveau du modèle de données.
Un objet observable possède un ou plusieurs
observateur, ajoutés par la méthode
addObserver(Observer o)
Lorsque l ’interface d ’un objet observable est
modifié, la méthode notifyObservers()
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 25 / 31
- 26. La classe Observable (java.util)
La méthode notifyObservers permet de notifier les
observateurs d ’une modification dans l ’état.
La modification est indiquée par la méthode
hasChanged().
Une fois les observateurs notifiés, la méthode
clearChanged permet d ’indiquer que l ’objet n ’est
plus dans l ’état modifié.
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 26 / 31
- 27. La classe Observable (java.util)
La méthode deleteObservers() permet de supprimer
l ’ensemble des observateurs associés à l ’objet.
Une modification est reflétée par la méthode
setChanged().
Une fois les observateurs notifiés, la méthode
clearChanged permet d ’indiquer que l ’objet n ’est
plus dans l ’état modifié.
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 27 / 31
- 28. L ’interface Observer (java.util)
Une classe qui implémente l ’interface Observer, désire
être notifiée des changements produits sur un objet
observable.
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 28 / 31
- 29. L ’interface Observer (java.util)
L ’unique méthode devant être implémentée est
update(Observable o, Object arg).
La méthode update est appelée automatiquement
lorsque l ’objet est notifié de la modification de
l ’observable.
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 29 / 31
- 30. L ’interface Observer (java.util)
Le premier paramètre est l ’objet qui notifie.
Le second paramètre est un objet passé à la méthode
update, au moyen d ’un appel à la méthode
notifyObserver(Object o)
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 30 / 31
- 31. Liens vers MVC ...
Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller
(MVC)
by Steve Burbeck, Ph.D.
http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html
A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk80 System
by Glenn E. Krasner and Stephen T. Pope
http://rain.create.ucsb.edu/~stp/CD-ROM/Documents/MVC
%20Cookbook/mvc_cookbook_1.html
TWISTING THE TRIAD: The evolution of the Dolphin Smalltalk MVP application framework
by Andy Bower, Blair McGlashan
http://www.object-arts.com/Papers/TwistingTheTriad.PDF
MVP: Model-View-Presenter: The Taligent Programming Model for C++ and Java
by Mike Potel
ftp://www6.software.ibm.com/software/developer/library/mvp.pdf
MVC meets Swing: Explore the underpinnings of the JFC's Swing components
by Todd Sundsted
www.javaworld.com/javaworld/jw-04-1998/jw-04-howto.html
The Model-View-Controller (MVC) Framework
Stingray Software
http://www.stingray.com/products/objtoolkitpro/mvc.cfm
ModelViewControllerHistory
http://c2.com/cgi/wiki?ModelViewControllerHistory
Deruelle Laurent
Copyright © 2002 Laurent Deruelle
Module UV Java
Page 31 / 31