Download - French - PureMVC IIBP Translation
-
8/8/2019 French - PureMVC IIBP Translation
1/50
ImplmentationIdiomes
etMeilleures Pratiques
Construire et Maintenir des Applications Clientes Robustes et volutives enutilisant PureMVC
laide dexemples en Actionscript 3 et en MXML
ViewComponents
Data Objects
Local or Remote
Faade
Mediator
Mediator
Mediator
Mediator
Mediator
View
Controller
Command
Command Command
Command
Proxy
Proxy
Proxy
Proxy
Model
Any
Proxy
AnyAny
Command
Obj
Obj
Obj
Obj
Obj
UI
UI
UI
UI
UI
AUTEUR: Cliff Hall TRADUIT PAR: Eric La Rocca
MISE A JOUR: 4/15/2008
-
8/8/2019 French - PureMVC IIBP Translation
2/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 2 de 50 4/15/2008 3:45 PM
Gnralits conceptuelles de PureMVC 4
Modle & proxys 4
Vue & mdiateurs 4
Contrleur & commandes 5
Faade & acteurs centraux 5
Observateurs & notifications 5
Utiliser des notifications pour dclencher des commandes 6
Les mdiateurs envoient, sabonnent et reoivent des notifications 6
Les proxys envoient mais ne reoivent pas de notifications 6
Faade 7
Quest-ce quune faade concrte? 8
Crer une faade concrte pour votre application 9
Initialiser votre faade concrte 11
Notifications 13
vnements vs. notifications 14
Dfinir un vnement et des constantes de notification 15
Commandes 16
Utilisation de commandes macros et de commandes simples 17
Couplage faible des commandes aux mdiateurs et aux proxys 18
Orchestration dactions complexes et logique mtier 19
-
8/8/2019 French - PureMVC IIBP Translation
3/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 3 de 50 4/15/2008 3:45 PM
Mdiateurs 24
Responsabilits dun mdiateur concret 24
Transtyper implicitement un composant visuel 25
couter et rpondre au composant visuel 28
Grer des notifications dans un mdiateur concret 29
Coupler des mdiateurs des proxys et dautres mdiateurs 32
Interactions utilisateur entre composants visuels et mdiateurs 34
Proxys 38 Responsabilits dun proxy concret 39
Transtyper implicitement un objet de donnes 40
Empcher le couplage aux mdiateurs 42
Encapsuler la logique domaine dans les proxys 42
Interagir avec des proxys distants 44
Inspiration
PureMVC est un framework bas sur des patterns et motiv lorigine par le besoin de concevoir des clients RIAhautement performants. Il fait dsormais lobjet de portagevers dautres langages et plateformes incluant desenvironnements serveur. Ce document porte sur la partieclient.
Alors que linterprtation et les implmentations sontspcifiques chaque plateforme supporte par PureMVC,les patterns utiliss sont dfinis avec prcision dans linfameux ouvrage de la Bande des Quatre :
Design Patterns: Catalogue desmodles de conception rutilisables(ISBN 2-711-78644-7)
Vivement recommand.
-
8/8/2019 French - PureMVC IIBP Translation
4/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 4 de 50 4/15/2008 3:45 PM
Gnralits conceptuelles de PureMVC
Le framework PureMVC a un objectif prcis : vous aider sparer les
parties de code de votre application en trois tiers bien distincts : lemodle, la vue et le contrleur.
Cette sparation en tiers, ainsi que le degr et le sens de couplageemploy pour les faire collaborer est dune importance capitale pourconstruire et maintenir des applications volutives.
Dans cette implmentation du classique mta pattern MVC, ces troistiers sont gouverns par trois singletons (classes instance unique)appels Model,View et Controller. Ensemble, ces trois classes sont
dnommes les acteurs centraux
La classe Facade, un quatrime singleton, simplifie le dveloppementen fournissant une interface unique pour la communication avec lesacteurs centraux.
Modle & proxys
Le modle cache les rfrences nommes des proxys. Le codedun proxy gre le modle de donnes; il communique si besoin est,
avec des services distants afin de dtablir un accs persistant ounon avec des donnes.
Ce qui contribue faire du modle un code portable.
Vue & mdiateurs
La vue cache les rfrences nommes des mdiateurs. Lemdiateur reprsente les composants visuels; en leur nom, il ajoute
des couteurs, change des notifications avec le reste du systmeet manipule directement leur tat.
Cela distingue la dfinition de la vue de la logique qui la contrle.
-
8/8/2019 French - PureMVC IIBP Translation
5/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 5 de 50 4/15/2008 3:45 PM
Gnralits conceptuelles de PureMVC
Contrleur & commandes
Le contrleur maintient les mappings nomms aux classes decommande, qui, elles, sont sans tat et sont cres au besoinuniquement.
Les commandes peuvent ventuellement accder ou interagir avecdes proxys, envoyer des notifications, excuter dautrescommandes et sont souvent utilises pour orchestrer des phasescomplexes ou dampleur comme le dmarrage ou la clture duneapplication. Elles abritent la logique mtier de votre application.
Faade & acteurs centraux
La faade, qui est un autre singleton, initialise les acteurs centraux(le modle, la vue, le contrleur), et fournit un endroit unique pouraccder toutes leurs mthodes publiques.
En tendant la faade, votre application profite de tous lesavantages des acteurs centraux sans avoir les importer et lesutiliser directement. Vous implmenterez facilement une faade
concrte pour votre application, et ce, une seule et unique fois.
Afin daccder et de communiquer entre eux, les proxys, lesmdiateurs et les commandes peuvent alors utiliser la faadeconcrte de votre application.
Observateurs & notifications
Les applications PureMVC sont prvues pour fonctionner dans desenvironnements ne disposant pas des classes Event etEventDispatcher de Flash, le framework implmente donc unmcanisme de notification Observer afin de permettre unecommunication faiblement couple entre les acteurs centraux MVCet le reste du systme.
-
8/8/2019 French - PureMVC IIBP Translation
6/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 6 de 50 4/15/2008 3:45 PM
Gnralits conceptuelles de PureMVC
Observateurs & notifications
Il nest pas ncessaire de connatre les dtails de cetteimplmentation Observer/Notification; cest interne au framework.Pour envoyer une notification depuis des proxys, des mdiateurs,des commandes et depuis la faade, vous utiliserez une simplemthode qui ne requiert mme pas la cration dune instance de laclasse Notification.
Utiliser des notifications pour dclencher des commandes
Dans votre faade concrte, les commandes sont mappes desnoms de notifications, et elles sont automatiquement excutes parle contrleur lorsque les notifications correspondantes sontenvoyes. Les commandes orchestrent habituellement desinteractions complexes entre des parties de la vue et du modletout en nen sachant le moins possible sur chacune.
Les mdiateurs envoient, sabonnent et reoivent des notifications
Lorsquils sont enregistrs auprs de la vue, les mdiateurs sontinterrogs sur les notifications qui les intressent. A lappel de leurmthode listNotifications, ils doivent retourner un tableau avecles noms des notifications auxquelles ils sont abonns.
Par la suite, lorsquune notification du mme nom est envoye parun acteur quelconque du systme, les mdiateurs intresss serontavertis (notifis) par lappel de leur mthode handleNotification qui lon passe une rfrence de la notification concerne.
Les proxys envoient mais ne reoivent pas de notifications
Les proxys peuvent envoyer des notifications pour diffrentesraisons, comme par exemple la rception de la rponse dunservice distant ou bien la mise jour de donnes.
-
8/8/2019 French - PureMVC IIBP Translation
7/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 7 de 50 4/15/2008 3:45 PM
Gnralits conceptuelles de PureMVC
Les proxys envoient mais ne reoivent pas de notifications
Pour un proxy, tre lcoute de notifications implique un couplagetrop troit avec les tiers vue et contrleur.
Ces tiers tant en charge de reprsenter le modle de donnes etde permettre lutilisateur dinteragir avec, ils doivent doncobligatoirement couter les notifications provenant des proxys quiincarnent ce modle de donnes.
Cependant, la vue et le contrleur devraient pouvoir varier sansaffecter le modle de donnes.
Par exemple, une application administratrice et une applicationutilisatrice pourraient partager les classes du mme modle. Siseuls les cas dutilisation diffrent, ils peuvent tre raliss viadiffrents couples vue/contrleur dun mme modle.
Faade
Les trois acteurs centraux du mta pattern MVC sont reprsents enPureMVC par les classes Model,View et Controller. Pour simplifier le
processus de dveloppement dapplications, PureMVC emploie lepattern faade.
La faade relaie vos requtes aux classes Model,View et Controller,afin de vous dispenser dimporter ces classes dans votre code et dedevoir les manipuler une une. La classe Facade instancieautomatiquement dans son constructeur ces singletons qui composentle cur MVC.
Habituellement, la faade sera sous-classe dans votre application et
utilise pour initialiser le contrleur laide dun mapping decommandes. La prparation du modle et de la vue est alorsorchestre par les commandes excutes par le contrleur.
-
8/8/2019 French - PureMVC IIBP Translation
8/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 8 de 50 4/15/2008 3:45 PM
Faade
Quest ce quune faade concrte ?
Bien que les acteurs centraux constituent une implmentationcomplte et utilisable, la faade fournit une implmentation quidevrait tre considre abstraite, c'est--dire jamais instanciedirectement.
Sous-classez plutt la faade et ajoutez ou supplantez (override)certaines de ses mthodes afin de les rendre utilisables dans votreapplication.
Cette faade concrte est alors utilise pour accder et notifier lescommandes, les mdiateurs et les proxys qui constituent lesystme. Par convention, on la nomme ApplicationFacade mais
vous pouvez la nommer comme bon vous semble.
Gnralement, la hirarchie des vues de votre application(composants visuels) sera cre conformment la plateforme quevous utilisez. En Flex, une application MXML instancie tous ses
enfants ou une animation Flash cre tous ses objets sur la scne(Stage). Une fois cette hirarchie des vues construite, lemcanisme PureMVC est activ et les parties Modle et Vue sontprtes lemploi.
Par ailleurs, en isolant le code applicatif de lenvironnementPureMVC associ, votre faade concrte contribue faciliter leprocessus de dmarrage. Lapplication se contente de passer sapropre rfrence la mthode startup du singleton quest votre
Faade concrte.
-
8/8/2019 French - PureMVC IIBP Translation
9/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 9 de 50 4/15/2008 3:45 PM
Faade
Crer une faade concrte pour votre application
Votre Faade concrte na pas grand chose faire pour rendrevotre application puissante. Voyez limplmentation suivante :
ApplicationFacade.as:
package com.me.myapp
{
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3..patterns.facade.*;
import com.me.myapp.view.*;import com.me.myapp.model.*;
import com.me.myapp.controller.*;
// Une faade concrte pour MyApp
publicclass ApplicationFacade extends Faade implements IFacade
{
// Dfinition des constantes pour les noms des Notifications
public static const STARTUP:String = "startup";
public static const LOGIN:String = "login";
// Mthode Factory du singleton ApplicationFacade
public staticfunction getInstance() : ApplicationFacade {
if ( instance == null ) instance = new ApplicationFacade( );
return instance as ApplicationFacade;
}
// Enregistrer les Commandes auprs du Contrleur
override protectedfunction initializeController( ) : void {
super.initializeController();
registerCommand( STARTUP, StartupCommand );
registerCommand( LOGIN, LoginCommand );
registerCommand( LoginProxy.LOGIN_SUCCESS, GetPrefsCommand );
}
// Lance lenvironnement PureMVC, passage dune rfrence lapplication
public function startup( app:MyApp ) : void
{
sendNotification( STARTUP, app );
}
}
}
-
8/8/2019 French - PureMVC IIBP Translation
10/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 10 de 50 4/15/2008 3:45 PM
Faade
Crer une faade concrte pour votre application
Quelques points noter propos du code prcdent:
o Il tend la classe Facade de PureMVC, qui, de son cot
implmente linterface IFacade.
o Il ne supplante pas le constructeur. Si ctait le cas, ilappellerait avant toute chose le constructeur de lasuperclasse.
o Il dfinit une mthode statique getInstance qui
retourne linstance du singleton. Au besoin, il la crepuis la cache. La rfrence de linstance est conservedans une proprit de la superclasse (Facade) et doit
tre transtype au type de la sous-classe avant dtreretourne.
o Il dfinit des constantes pour les noms des notifications.
Dans la mesure o la faade concrte est utilise par lesautres lments pour communiquer, elle est la placeidale pour dfinir ces constantes.
o Il initialise le contrleur avec un ensemble decommandes qui seront excutes lors de lenvoi desnotifications attendues.
o Il fournit une mthode startup qui prend un argument
(dans ce cas) de type myApp quil passe, via unenotification, StartupCommand (enregistre avec la
notification STARTUP)
-
8/8/2019 French - PureMVC IIBP Translation
11/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 11 de 50 4/15/2008 3:45 PM
Faade
Crer une faade concrte pour votre application
Avec ces seules exigences dimplmentation, votre faade concrteva hriter de tout un ensemble de fonctionnalits de sa superclasseabstraite.
Initialiser votre faade concrte
Le constructeur de la faade de PureMVC appelle des mthodesprotges afin dinitialiser les instances des classes Model, View et
Controller puis les place en cache pour rfrence.
Par composition, la faade implmente et expose alors lescaractristiques de Model, View et Controller; agrgeant leurs
fonctionnalits et vitant ainsi au dveloppeur toute interactiondirecte avec les acteurs centraux du framework.
O et comment la faade intervient-elle dans lorganisation typedune application ? Voyez le code Application Flex suivant :MyApp.mxml:
-
8/8/2019 French - PureMVC IIBP Translation
12/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 12 de 50 4/15/2008 3:45 PM
Faade
Initialiser votre faade concrte
Cest tout ! Plutt facile.
Construisez la hirarchie visuelle de base, rcuprez linstance deApplicationFacade et invoquez sa mthode startup.
NOTE: Sous AIR, nous aurions utilis applicationComplete , et en Flash il nous aurait fallu instancier
Facade puis faire lappel de startup sur le frame 1 ou dans un fichier de classe distinct.
Les points cls de cet exemple sont:o Nous construisons linterface MXML de faon classique;
en commenant par le tag , avec des
composants et des conteneurs standards oupersonnaliss.
o Un script dclare et initialise une variable prive aveclinstance du singleton ApplicationFacade
o Linitialisation de la variable par un appel la mthodestatique ApplicationFacade.getInstance signifie
quau dclenchement du creationComplete du bloc
Application, la faade aura t cre et, avec elle, le
modle, la vue et le contrleur; par contre, aucunmdiateur ni aucun proxy nest encore cr ce stade.
o Dans le creationComplete du tag Application, nous
invoquons la mthode startup, en passant une
rfrence de lapplication.
Notez quhabituellement les composants visuels nont nul besoin deconnaitre ni dinteragir avec la faade, mais le bloc principalApplication est lexception la rgle.
-
8/8/2019 French - PureMVC IIBP Translation
13/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 13 de 50 4/15/2008 3:45 PM
Faade
Initialiser votre faade concrte
Le bloc principal Application (ou lanimation Flash) construit la
hirarchie visuelle, initialise la faade, puis active le mcanismePureMVC.
Notifications
PureMVC implmente le pattern Observer afin que les acteursprincipaux et leurs collaborateurs puissant communiquer de faon
faiblement couple, et sans dpendance de plateforme.
Le langage Actionscript ne fournit pas le modle dvnements utilispar Flex et Flash, ceux-l proviennent du package Flash. Ce frameworka t port vers dautres plateformes telle que C# et J2ME, car il greses propres communications internes et non celles fournies par laplateforme Flash.
Plus qu'un simple remplacement des vnements (Events), les
notifications oprent de faon fondamentalement diffrente, ettravaillent en synergie avec les vnements afin de produire descomposants visuels qui soient facilement rutilisables et qui, lorsquilssont correctement construits, ignorent mme le systme PureMVCauquel ils sont coupls.
vnements vs. notifications
Les vnements sont dispatchs depuis des objets d'affichage Flash
ceux-l proviennent qui implmentent l'interfaceIEventDispatcher. L'vnement est propag (bubbled up)
travers la hirarchie d'affichage, permettant tous les objetsascendants (parents, grands-parents) la gestion de cetvnement.
-
8/8/2019 French - PureMVC IIBP Translation
14/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 14 de 50 4/15/2008 3:45 PM
Notifications
vnements vs. notifications
C'est un mcanisme de chane de responsabilit par lequel seulsceux de la ligne parent/enfant ont la possibilit de recevoir oud'agir sur un vnement moins quils disposent dune rfrencevers le dispatcheur et puissent directement lui assigner uncouteur.
Les notifications sont envoyes par la faade et les proxys;coutes et envoyes par les mdiateurs; mappes et envoyes
par les commandes. C'est un mcanisme depublication/souscription par lequel plusieurs observateurs peuventrecevoir ou agir sur la mme notification.
Chaque notification peut se voir dote dun contenu (body)optionnel, qui peut tre un quelconque objet Actionscript.
Contrairement aux vnements de Flash, crer une notificationpersonnalise est rarement ncessaire puisque celle-ci dispose par
dfaut dun conteneur. Vous pouvez bien sr crer des notificationspersonnalises afin de renforcer le typage des interactions avecelles, mais choisir entre les bnfices limits de la vrification lacompilation (particulirement pour les notifications) et la chargedavoir maintenir plusieurs classes de notifications est unequestion de style de programmation.
Les notifications ont aussi un type optionnel qui peut aider leurs
destinataires les distinguer. Par exemple, dans une application
ddition de documents. Il peut y avoir une instance de Proxy pourchaque document ouvert et un mdiateur pour le composant visuelutilis pour diter le document. Le proxy et le mdiateur pourraientpartager une cl unique que le proxy passerait en tant que typedune notification.
-
8/8/2019 French - PureMVC IIBP Translation
15/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 15 de 50 4/15/2008 3:45 PM
Notifications
vnements vs. notifications
Toutes les instances de mdiateur enregistres pour lesnotifications de ce proxy seront notifies, mais utiliseront laproprit type pour dterminer quelle notification elles devront
rpondre.
Dfinir des notifications et des constantes dvnements
Nous avons vu que la faade concrte est une bonne place pour
dfinir les constantes de notifications communes. Constituant lemcanisme central de linteraction avec le systme, toutes lesnotifications collaboreront de fait avec la faade.
Plutt quune faade concrte, une classe ApplicationConstants
distinctes est parfois utilise afin de permettre lutilisation de cesconstantes par une autre application.
Une dfinition centralise de constantes pour les noms de
notifications garantit quen cas de faute de frappe dans le nomdune notification, le compilateur signalera cette erreur alors quilresterait silencieux si lon utilisait une simple chaine de caractres.
Par contre, ne dclarez pas le nom des vnements dans la faadeconcrte.
Dfinissez statiquement les constantes de noms dvnements dans
chacune des classes frontires qui les gnrent, ou dans les classes
des vnements personnaliss qui sont dispatches.
-
8/8/2019 French - PureMVC IIBP Translation
16/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 16 de 50 4/15/2008 3:45 PM
Notifications
Dfinir des notifications et des constantes dvnements
Reprsentants les limites physiques de lapplication, les composantsvisuels et les objets de donnes peuvent demeurer rutilisablessils communiquent avec leur mdiateur ou proxy associs via undispatching dvnements plutt que par des appels directs demthodes ou lenvoi de notifications.
Si un composant visuel ou un objet de donnes dispatche unvnement que le mdiateur ou le proxy associ coute, il est alors
probable que seuls ces paires dlments (composantvisuel/mdiateur ou objet de donns/proxy) soient intresses parcet vnement en particulier.
Les autres communications entre un couteur et le reste dusystme PureMVC devrait se faire via des notifications.
Bien que les relations des ces paires de collaborations soientforcment troites, elles ont un couplage faible avec le reste de
lapplication; offrant ainsi plus de maitrise lors dun ventuelragencement (refactoring) de linterface utilisateur ou du modlede donnes.
Commandes
La faade concrte initialise habituellement le contrleur aveclensemble des mappings (Notification->Commande) ncessaires audmarrage.
Pour chaque mapping, le contrleur senregistre en tantquobservateur de la notification donne. Un fois notifi, le contrleurinstancie la commande associe. Finalement, le contrleur appelle lamthode execute de cette commande en lui passant la notification.
-
8/8/2019 French - PureMVC IIBP Translation
17/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 17 de 50 4/15/2008 3:45 PM
Commandes
Les commandes nont pas dtat; elles sont cres au besoin etdoivent normalement disparaitre aprs leur excution. Pour cetteraison, il est important de ne pas instancier ni de stocker desrfrences de commandes dans des objets persistants.
Utilisation de commandes macros et de commandes simples
Les commandes comme toute classe du framework PureMVC,implmentent une interface appele ICommand. PureMVC propose
deux implmentations que vous pouvez facilement tendre.
La classe SimpleCommand dispose juste dune mthode execute qui
accepte une instance de INotification. Insrez votre code dans la
mthode execute et cest tout.
La classe MacroCommand vous permet dexcuter plusieurs sous-
commandes en squence, chacune tant cre et se voit passe lanotification par rfrence.
MacroCommand appelle sa mthode initializeMacroCommand
depuis son constructeur. Pour chaque commande ajouter, il voussuffit de supplanter (override) cette mthode dans vos sous-classespour appeler la mthode addSubCommand. Vous pouvez crer
nimporte quelle combinaison de commandes simples ou decommandes macros.
Couplage faible des commandes aux mdiateurs et aux proxys
Lexcution des commandes par le contrleur est un rsultat delenvoi des notifications. Les commandes ne devraient treinstancies et excutes que par un contrleur.
-
8/8/2019 French - PureMVC IIBP Translation
18/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 18 de 50 4/15/2008 3:45 PM
Commandes
Couplage faible des commandes aux mdiateurs et aux proxys
Afin de communiquer et dinteragir avec le reste du systme, lescommandes peuvent:
o enregistrer, supprimer ou vrifier lenregistrement demdiateurs, de proxys et de commandes.
o Envoyer des notifications destines dautres commandes ou dautres mdiateurs.
o Rcuprer les proxys et les mdiateurs et les manipulerdirectement.
Les commandes nous permettent deffectuer les changementsdtat des lments visuels, ou dassurer le transport des donnesde part et dautre de la vue.
Elles peuvent tre utilises pour faire des transactions avec le
modle, ce qui engendre de multiples proxys et ncessite lenvoi denotifications lorsque la transaction est termine, ou pour grer desexceptions et traiter les incidents.
Orchestration dactions complexes et logique mtier
Avec la multiplication des endroits o placer le code (commandes,mdiateurs et proxys); les questions suivantes reviennentinvitablement :O placer tel code? Que doit faire une commande exactement ?La premire distinction faire sur la logique de votre application estentre la logique mtier et la logique domaine
-
8/8/2019 French - PureMVC IIBP Translation
19/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 19 de 50 4/15/2008 3:45 PM
Commandes
Orchestration dactions complexes et logique mtier
Les commandes abritent la logique mtier de notre application;limplmentation technique des cas dutilisation devrait composer lemodle de domaine. Cela suppose une coordination entre le modleet la vue.
Le modle maintient son intgrit travers lutilisation de proxys,qui eux abritent la logique domaine et exposent une API permettantla manipulation des objets de donnes. Ces proxys encapsulent
tous les accs au modle de donnes que cela soit ct client ouct serveur, ne laissant de pertinent lapplication que ce quiconcerne la faon synchrone ou non daccder aux donnes.
Les commandes peuvent tre utilises pour orchestrer des actionscomplexes qui doivent tre excutes selon un ordre spcifique, etdans certains cas, lorsque le rsultat dune action doit alimenter lasuivante.
Les mdiateurs et les proxys devraient exposer aux commandes (etentre eux) une interface rudimentaire, qui masque limplmentationdes lments visuels ou des objets de donnes auxquels ils sontassocis.
Notez que lorsque nous parlons dun composant visuel, nousparlons dun bouton ou dun composant avec lequel lutilisateurinteragit directement. Lorsque nous parlons dobjet de donnes celainclut les diverses structures contenant des donnes ou bien les
services distants que nous pouvons appeler pour obtenir ou stockerces donnes. Les commandes interagissent avec les mdiateurs etles proxys, mais doivent tre isoles des implmentations
frontires. tudiez les commandes ci-dessous utilises pourprparer le systme :
-
8/8/2019 French - PureMVC IIBP Translation
20/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 20 de 50 4/15/2008 3:45 PM
Commandes
Orchestration dactions complexes et logique mtier
StartupCommand.as:
package com.me.myapp.controller
{
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.command.*;
import com.me.myapp.controller.*;
// une commande macro excute lorsque lapplication dmarre.
publicclass StartupCommand extends MacroCommand
{
// initialise la macro commande avec des sous-commandes.overrideprotectedfunction initializeMacroCommand() : void
{
addSubCommand( ModelPrepCommand );
addSubCommand( ViewPrepCommand );
}
}
}
Cest une macro commande qui ajoute deux sous commandes,
lesquelles sont utilises selon un ordre de type FIFO (premireentre, premire sortie) lorsque MacroCommand est excut.
Cela constitue une file dactions excuter au dmarrage. Mais quedevrions-nous faire exactement, et dans quel ordre ?
Avant que lutilisateur puisse interagir avec les donnes delapplication, le modle doit tre plac dans un tat cohrent etconnu. Ensuite, la vue peut tre prpare afin de prsenter cesdonnes et permettre aux utilisateurs de les manipuler.
Par consquent, le dmarrage consiste habituellement en deuxtapes la prparation du modle, suivi par la prparation de lavue
-
8/8/2019 French - PureMVC IIBP Translation
21/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 21 de 50 4/15/2008 3:45 PM
Commandes
Orchestration dactions complexes et logique mtier
ModelPrepCommand.as:package com.me.myapp.controller
{
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.observer.*;
import org.puremvc.as3.patterns.command.*;
import com.me.myapp.*;
import com.me.myapp.model.*;
// Crer et enregistrer les Proxys avec le Modle.
publicclass ModelPrepCommand extends SimpleCommand
{
// Appel par MacroCommandoverride publicfunction execute( note : INotification ) : void
{
facade.registerProxy( new SearchProxy() );
facade.registerProxy( new PrefsProxy() );
facade.registerProxy( new UsersProxy() );
}
}
}
Prparer le modle se rsume simplement crer et enregistrer
tous les proxys requis par le systme au dmarrage.
ModelPrepCommand ci-dessus est une SimpleCommand qui prpare le
modle. Cest la premire sous-commande de la commande macro(startupCommand), elle est donc excute en premier.
travers la faade concrte, on cre et enregistre les diffrentesclasses Proxy que le systme utilisera au dmarrage. Notez que lacommande ne ralise aucune manipulation ou initialisation dumodle de donnes. Le proxy est responsable de la rcupration,de la cration ou de linitialisation des donnes ncessaires pour laprparation de son objet de donne associ.
-
8/8/2019 French - PureMVC IIBP Translation
22/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 22 de 50 4/15/2008 3:45 PM
Commandes
Orchestration dactions complexes et logique mtier
ViewPrepCommand.as:package com.me.myapp.controller
{
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.observer.*;
import org.puremvc.as3.patterns.command.*;
import com.me.myapp.*;
import com.me.myapp.view.*;
// Cre et enregistre les mdiateurs avec la vue.
publicclass ViewPrepCommand extends SimpleCommand
{
override publicfunction execute( note : INotification ) : void{
var app:MyApp = note.getBody() as MyApp;
facade.registerMediator( new ApplicationMediator( app ) );
}
}
}
Cest une commande simple (SimpleCommand) qui prpare la vue.
Cest la dernire des sous-commandes de la macro commande
(MacroCommand) et comme telle, elle est excute en dernier.
Remarquez que le seul mdiateur cre et enregistr estApplicationMediator, qui rgit le composant visuel Application.
Ensuite, il passe le corps de la notification au constructeur dumdiateur. Il sagit dune rfrence lobjet Application transmis
par Application lui-mme lorsque la notification STARTUP a t
envoye (voir lexemple myApp prcdent)
Application est un composant visuel particulier dans la mesure o
il instancie et a pour enfants tous les autres composants visuels quisont initialiss au dmarrage.
-
8/8/2019 French - PureMVC IIBP Translation
23/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 23 de 50 4/15/2008 3:45 PM
Commandes
Orchestration dactions complexes et logique mtier
Pour communiquer avec le reste du systme, les composantsvisuels ont besoin de mdiateurs. Et crer ces mdiateurs ncessiteune rfrence vers le composant visuel quils vont reprsenter, etque seul le bloc Application connat ce stade.
Le mdiateur de Application est la seule classe qui sait tout de
limplmentation de Application, ceci afin de crer, au sein mme
de son constructeur, tous les autres mdiateurs.
En fait, avec les trois commandes ci-dessus, nous avons orchestreune initialisation ordonne du modle et de la vue. Ainsi, lescommandes nont savent pas trop sur le modle et la vue.
Lorsque des lments du modle ou de limplmentation de la vuechangent, les proxys et les mdiateurs peuvent tre r-agencs volont.
Un ragencement des frontires de lapplication ne devrait pasimpacter la logique mtier des commandes.
Le modle devrait encapsuler la logique du domaine, assurantainsi lintgrit des donnes dans les proxys.
Les commandes constituent le transactionnel ou la logique affairedu modle, encapsulant la coordination des transactions multi-proxys ou en grant et en rapportant les exceptions dune faon
conforme ce quattend lapplication.
-
8/8/2019 French - PureMVC IIBP Translation
24/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 24 de 50 4/15/2008 3:45 PM
Mdiateurs
Un mdiateur est une classe utilise pour mettre en relation les
interactions de lutilisateur sur un ou plusieurs composants visuels delapplication (par exemple, une grille Flex ou une animation Flash)avec le reste de lapplication PureMVC.
Dans une application Flash, un mdiateur place habituellement descouteurs dvnements dans son composant visuel afin de grer lesactions de lutilisateur et les requtes de ce composant. Il envoie etreoit des notifications pour communiquer avec le reste delapplication.
Responsabilits dun mdiateur concret
Les environnements Flash, Flex et AIR fournissent une vastegamme de composants visuels trs interactifs. Vous pouvez lestendre ou crire le vtre en Actionscript afin de prsenter lemodle de donnes de multiples faons et de permettre auxutilisateurs dinteragir avec.Dans un futur pas si lointain, dautres plateformes seront capablesdexcuter de lActionscript. Et le framework a t port et prsentsur dautres plateformes comme Silverlight ou J2ME, largissant leshorizons du dveloppement de RIA avec cette technologie.
Un objectif du framework PureMVC est dtre Indpendant destechnologies utilises aux frontires de lapplication et de fournir unlangage simple pour adapter le composant dinterface utilisateur oula structure/service du moment.
-
8/8/2019 French - PureMVC IIBP Translation
25/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 25 de 50 4/15/2008 3:45 PM
Mdiateurs
Responsabilits dun mdiateur concret
Pour une application PureMVC, un composant visuel reprsentenimporte quel composant dinterface utilisateur, indpendammentdu framework dorigine, et du nombre de sous-composants quilcontient. Un composant visuel devrait encapsuler autant dtat etdoprations que possible, nexposant quune simple APIdvnements, de mthodes et de proprits.
Un mdiateur concret nous aide a adapter un ou plusieurs
composants visuels lapplication en dtenant les seules rfrences ces composants et en interagissant avec lAPI quils exposent.
Les responsabilits du mdiateur sont principalement la gestion desvnements envoys par le composant visuel et des notificationspertinentes mises par le reste du systme.Dans la mesure o les mdiateurs aussi interagissent souvent avecles proxys, il est frquent pour un mdiateur de rcuprer et deconserver dans son constructeur une rfrence locale des proxys lesplus souvent utiliss. Cela rduit les appels rpts retrieveProxy pour obtenir la mme rfrence.
Transtyper implicitement un composant visuel
Limplmentation de base fournie avec PureMVC pour le mdiateuraccepte un nom et un Objet gnrique comme seuls arguments duconstructeur.
Le constructeur de votre mdiateur concret passera son composantvisuel la superclasse qui deviendra immdiatement accessible entant que proprit protge nomme viewComponent et type
gnriquement en Objet.
-
8/8/2019 French - PureMVC IIBP Translation
26/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 26 de 50 4/15/2008 3:45 PM
Mdiateurs
Transtyper implicitement un composant visuel
Vous pourriez aussi dfinir dynamiquement le composant visuel dumdiateur aprs sa construction, en appelant sa mthodesetViewComponent
Quelque soit la manire avec laquelle il a t dfini, vous devrezfrquemment transtyper cet Objet en son type actuel, afin de
pouvoir accder son API, ce qui peut devenir lourd et rptitif.
Le langage Actionscript dispose daccesseurs implicites. Un getterimplicite ressemble une mthode, mais apparait comme uneproprit au reste de la classe et de lapplication. Cest trs utilepour rgler les frquents problmes de transtypage.
Une recette pratique pour votre mdiateur concret est dutiliser ungetter implicite qui transtype un composant visuel en son typeactuel et de lui donner un nom significatif.En crant une mthode comme celle-ci :
protectedfunctionget controlBar() : MyAppControlBar
{
return viewComponent as MyAppControlBar;
}
Puis, quelque part dans votre mdiateur, plutt que de faire:
MyAppControlBar ( viewComponent ).searchSelection =
MyAppControlBar.NONE_SELECTED;
Nous pouvons plutt faire cela:
controlBar.searchSelection = MyAppControlBar.NONE_SELECTED;
-
8/8/2019 French - PureMVC IIBP Translation
27/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 27 de 50 4/15/2008 3:45 PM
Mdiateurs
couter et rpondre au composant visuel
Un mdiateur est habituellement en charge dun seul composantvisuel, mais il pourrait en grer plusieurs, commeApplicationToolBar et ses boutons ou ses contrles intgrs.
Nous pouvons placer un ensemble de contrles (tel un formulaire)dans un composant visuel puis les exposer au mdiateur sous laforme de proprits de ce composant. Mais le mieux seraitdencapsuler autant que possible limplmentation du composant et
dexposer les proprits du composant via un objet de typepersonnalis.
Le mdiateur va grer les changes entre le tiers contrleur et letiers modle, actualisant le composant visuel la rception desnotifications attendues.
Dans Flash, la construction du mdiateur ou lappel de samthode setViewComponent, nous plaons habituellement des
couteurs dvnements dans le composant visuel en utilisant lamthode:
controlBar.addEventListener( AppControlBar.BEGIN_SEARCH, onBeginSearch );
La nature de la raction du mdiateur en rponse cet vnement,est bien sr, totalement dfinie par les exigences du moment.En rponse un vnement, un mdiateur concret ralise
gnralement certaines des actions suivantes :
o Vrifier, si ncessaire, le type ou le contenu delvnement.
-
8/8/2019 French - PureMVC IIBP Translation
28/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 28 de 50 4/15/2008 3:45 PM
Mdiateurs
couter et rpondre au composant visuel
o Vrifier ou modifier les proprits (ou les mthodes)exposes dun composant visuel.
o Vrifier ou modifier les proprits (ou les mthodes)exposes dun proxy.
o mettre une ou plusieurs notifications qui seronttraites par dautres mdiateurs ou des commandes
(voire par la mme instance de mdiateurmetteur).
Quelques rgles empiriques:
o Si dautres mdiateurs doivent tre impacts lors dela rponse un vnement, mettez alors jour unproxy commun ou envoyez une notification qui seratraite de faon approprie par chacun de ces
mdiateurs.
o Si les interactions entre les mdiateurs sontnombreuses, une bonne faon est de recourir unecommande afin de coder les diffrentes tapes araliser en un mme endroit.
o vitez de rcuprer et de travailler directement surles autres mdiateurs ou de faire un mdiateur qui le
permette.
-
8/8/2019 French - PureMVC IIBP Translation
29/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 29 de 50 4/15/2008 3:45 PM
Mdiateurs
couter et rpondre au composant visuel
o Pour manipuler et diffuser aux mdiateurs lesinformations concernant ltat de lapplication,dfinissez des valeurs ou appelez des mthodes dansdes proxys spcialement crs pour conserver cettat et permettez aux mdiateurs dcouter lesnotifications mises par ces proxys.
Grer des notifications dans un mdiateur concret
Contrairement lajout dcouteurs dans les composants visuels, latechnique de couplage du mdiateur au systme PureMVC estsimple et automatique.
lenregistrement de la vue, le mdiateur est interrog sur lintrtquil porte aux notifications. Il rpond en fournissant un tableaucontenant le nom de toutes les notifications auxquelles il estabonn.
La faon la plus simple de rpondre est laide dune expressionunique qui cre et retourne un tableau anonyme contenant lesnoms de notifications. Ces noms devraient tre des constantesstatiques, habituellement dfinies dans la faade concrte.
Dfinir une liste dabonnement aux notifications dun mdiateur estfacile:
override publicfunction listNotificationInterests() : Array
{
return [ ApplicationFacade.SEARCH_FAILED,
ApplicationFacade.SEARCH_SUCCESS
];
}
-
8/8/2019 French - PureMVC IIBP Translation
30/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 30 de 50 4/15/2008 3:45 PM
Mdiateurs
Grer des notifications dans un mdiateur concret
Lorsquune des notifications liste est mise par un quelconqueacteur du systme (incluant le mdiateur lui-mme), la mthodehandleNotification du mdiateur sera appele et la notification
passe en argument.
De par sa lisibilit et la facilit avec laquelle on peut mettre jourla gestion des notifications dans la mthode handleNotification,
la structure switch/case est prfrable la structure if/else if.
Essentiellement, la rponse une notification devrait se limiter peu de code, et toute linformation requise devrait se trouver dansla notification elle-mme. Occasionnellement, certaines donnespeuvent provenir dun proxy bas sur linformation fournie par lanotification mais globalement la logique de traitement dunenotification doit rester simple. Si a nest pas le cas, cela indiqueque vous essayez de placer la logique mtier relevant dunecommande dans le gestionnaire de notification de votre mdiateur.
override publicfunction handleNotification( note : INotification ) : void
{
switch ( note.getName() )
{
case ApplicationFacade.SEARCH_FAILED:
controlBar.status = AppControlBar.STATUS_FAILED;
controlBar.searchText.setFocus();
break;
case ApplicationFacade.SEARCH_SUCCESS:
controlBar.status = AppControlBar.STATUS_SUCCESS;break;
}
}
-
8/8/2019 French - PureMVC IIBP Translation
31/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 31 de 50 4/15/2008 3:45 PM
Mdiateurs
Grer des notifications dans un mdiateur concret
En outre, le gestionnaire de notification dun mdiateur ne doit pasgrer plus de 4 ou 5 notifications.
Dans le cas contraire, cela indique que les responsabilits dumdiateur devraient tre divises plus finement. Crez desmdiateurs pour les sous-composants du composant visuel pluttque de tenter de tous les grer dans un mdiateur monolithique.
Lutilisation dune mthode de notification unique et prdfinieconstitue la diffrence fondamentale entre la faon qua unmdiateur dcouter des vnements et celle quil a dcouter desnotifications.
Dans le cas des vnements, nous avons un certain nombre demthodes gestionnaires; habituellement une pour chaquevnement que le mdiateur doit grer. Gnralement cesmthodes se contentent denvoyer des notifications et ne devraient
ni tre complexes, ni grer dans le dtail le composant visuel. Cedernier devrait encapsuler les dtails dimplmentation, enexposant une API sommaire au mdiateur.
Dans le cas des notifications, nous avons un gestionnaire uniquedans lequel nous grons toutes les notifications qui intressent lemdiateur.
Le mieux est de placer dans la mthode handleNotification la
totalit du code rpondant aux notifications. Chaque notification
tant sparment traite laide dun case dans une structure
switch.
-
8/8/2019 French - PureMVC IIBP Translation
32/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 32 de 50 4/15/2008 3:45 PM
Mdiateurs
Grer des notifications dans un mdiateur concret
Il y a eu beaucoup de discussion autour de lusage dun switch/case dans la mesure o de nombreux dveloppeursconsidrent cette approche comme limite puisque tous ces casesexcutent dans la mme mthode et ont donc la mme porte.Nanmoins, cette approche a t spcifiquement choisie afin delimiter lusage dun mdiateur; elle demeure donc lapprocherecommande.
Le mdiateur est destin permettre la communication entrellment visuel et le reste du systme.
Considrons le rle dun interprte assurant une conversation entreson ambassadeur et le reste des membres lors dune confrence lONU. Ses taches devraient se limiter faire des traductions, faire suivre des messages et occasionnellement trouver unemtaphore approprie ou une information particulire. Cest lamme chose pour le rle du mdiateur dans PureMVC.
Coupler des mdiateurs des proxys et dautres mdiateurs
Dans la mesure o la vue est ultimement charge de reprsenter lemodle de donnes de faon graphique et interactive, nous pouvonssupposer un couplage unidirectionnel et relativement fort avec lesproxys de lapplication. La vue doit connatre le modle, mais lemodle na rien savoir de la vue.
Les mdiateurs peuvent librement accder aux proxys du modle,
lire et manipuler les objets de donnes via une quelconque API
expose par le proxy. Cependant, dplacer ce traitement dans une
commande rduira le couplage entre la vue et le modle.
-
8/8/2019 French - PureMVC IIBP Translation
33/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 33 de 50 4/15/2008 3:45 PM
Mdiateurs
Coupler des mdiateurs des proxys et dautres mdiateurs
De la mme manire, les mdiateurs pourraient rcuprer depuis lavue, des rfrences dautres mdiateurs, les lire et les manipulerde toutes les faons exposes par le mdiateur rcupr.
Nanmoins cela nest pas une pratique recommande dans lamesure o cela cre des dpendances entre diffrentes parties de lavue, nuisant ainsi la capacit de r-agencer une partie de la vuesans en affecter une autre.
Un mdiateur qui souhaite communiquer avec une autre partie de
la vue devrait envoyer une notification plutt que de rcuprer et
de manipuler directement un autre mdiateur.
Les mdiateurs ne devraient pas exposer des mthodes permettant
des tiers de manipuler leur(s) composant(s) visuel(s); ils
devraient plutt le faire eux-mmes en rponse des notifications.
Si lessentiel des manipulations internes dun composant visuel esteffectu dans un mdiateur (en rponse un vnement ou unenotification), r-agencez (refactor) ce traitement en une mthodeinterne au composant, cela aura pour effet dencapsuler autant quepossible ses implmentations et daugmenter ainsi sa capacit tre rutilis.
Si lessentiel des manipulations des proxys ou de leurs donnes esteffectu dans un mdiateur, r-agencez le tout en une commande,
cela aura pour effet dallger le mdiateur, de dplacer la logiquemtier vers des commandes alors rutilisables par dautres partiesde la vue, et finalement cela diminuera le couplage entre la vue etle modle.
-
8/8/2019 French - PureMVC IIBP Translation
34/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 34 de 50 4/15/2008 3:45 PM
Mdiateurs
Interactions utilisateur entre composants visuels et mdiateurs
Considrons un composant LoginPanel comportant un formulaire.
Nous avons un LoginPanelMediator qui reoit de lutilisateur via le
LoginPanel, une identification (identifiant + mot de passe) et une
demande de login et qui, en rponse, initie une demande deconnexion.
La collaboration entre le composant LoginPanel et le
LoginPanelMediator consiste en lenvoi par le composant dun
vnement TRY_LOGIN lorsque lutilisateur sidentifie et souhaite seconnecter. Le LoginPanelMediator ragit lvnement par lenvoi
dune notification avec pour contenu le value objet LoginVO
complt par le composant.
LoginPanel.mxml:
pas utiliser de constantes ici, car Metadata est une directive du compilateur -->
[Event('tryLogin')];
import com.me.myapp.model.vo.LoginVO;
// Les champs de ce formulaire sont bi directionnellement
//relis aux proprits de lobjet
[Bindable] public varloginVO:LoginVO = new LoginVO();
[Bindable] public varloginStatus:String = NOT_LOGGED_IN;
//Dfinir une constante dans le composant visuel pour les //nomsdvnements
public static const TRY_LOGIN:String='tryLogin';
public static const LOGGED_IN:String='Logged In';
public static const NOT_LOGGED_IN:String='Enter Credentials';
]]>
-
8/8/2019 French - PureMVC IIBP Translation
35/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 35 de 50 4/15/2008 3:45 PM
Mdiateurs
Interactions utilisateur entre composants visuels et mdiateurs
-
8/8/2019 French - PureMVC IIBP Translation
36/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 36 de 50 4/15/2008 3:45 PM
Mdiateurs
Interactions utilisateur entre composants visuels et mdiateurs
Le LoginPanelMediator va aussi rpondre aux notifications
LOGIN_FAILED et LOGIN_SUCCESS puis va ajuster le statut de
LoginPanel.
LoginPanelMediator.as:package com.me.myapp.view
{
import flash.events.Event;
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.mediator.Mediator;import com.me.myapp.model.LoginProxy;
import com.me.myapp.model.vo.LoginVO;
import com.me.myapp.ApplicationFacade;
import com.me.myapp.view.components.LoginPanel;
// Un mdiateur pour interagir avec le composant LoginPanel.
public class LoginPanelMediator extends Mediator implements IMediator
{
public static const NAME:String = 'LoginPanelMediator';
public function LoginPanelMediator( viewComponent:LoginPanel )
{super( NAME, viewComponent );
LoginPanel.addEventListener( LoginPanel.TRY_LOGIN, onTryLogin );
}
// Liste les notifications attendues
override publicfunction listNotificationInterests( ) : Array {
return [ LoginProxy.LOGIN_FAILED,
LoginProxy.LOGIN_SUCCESS ];
}
// Gre les notifications
override publicfunction handleNotification( note:INotification ):void
{
switch ( note.getName() ) {
case LoginProxy.LOGIN_FAILED:
LoginPanel.loginVO = new LoginVO( );
loginPanel.loginStatus = LoginPanel.NOT_LOGGED_IN;
break;
-
8/8/2019 French - PureMVC IIBP Translation
37/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 37 de 50 4/15/2008 3:45 PM
Mdiateurs
Interactions utilisateur entre composants visuels et mdiateurs
case LoginProxy.LOGIN_SUCCESS:
loginPanel.loginStatus = LoginPanel.LOGGED_IN;
break;
}
}
// L utlisateur a cliqu le bouton Login: tentative de login
privatefunction onTryLogin ( event:Event ) : void {
sendNotification( ApplicationFacade.LOGIN, loginPanel.loginVO );
}
// Transtypage du viewComponent en son type actuel
protectedfunctionget loginPanel() : LoginPanel {
return viewComponent as LoginPanel;
}
}
}
Notez que LoginPanelMediator place un couteur dvnement
dans le constructeur de LoginPanel afin que la mthode
onTryLogin soit invoque lorsque lutilisateur clique sur le bouton
Login.
Dans la mthode onTryLogin, la notification LOGIN est nvoye, etavec elle, LoginVO qui contient les informations concernant
lutilisateur.
Plus tt dans la faade de lapplication, nous avions associ lacommande LoginCommand la notification LOGIN laide dune
commande registerCommand.
La mthode execute de cette commande va alors invoquer lamthode login de LoginProxy en passant lobjet LoginVO.
LoginProxy tentera alors une connexion via un service distant puis
enverra une notification LOGIN_SUCCESS ou LOGIN_FAILED. Ces
classes sont dfinies plus loin la fin de la section sur les proxys.
-
8/8/2019 French - PureMVC IIBP Translation
38/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 38 de 50 4/15/2008 3:45 PM
Mdiateurs
Interactions utilisateur entre composants visuels et mdiateurs
La mthode listNotificationInterests indique que
loginPanelMediator est abonn deux notifications:
LOGIN_SUCCESS et LOGIN_FAILED, Une fois notifi, il fixera la
variable loginStatus de LoginPanel LOGGED_IN en cas de succs
ou effacera lobjet LoginVO et fixera loginStatus NOT_LOGGED_IN
dans le cas dun chec.
Proxys
En gnral, le pattern proxy consiste fournir un substitut un objetafin de contrler laccs celui-ci. Dans une application base surPureMVC, la classe Proxy est utilise spcifiquement pour grer une
partie du modle de donnes de lapplication.
Habituellement, un proxy accde une structure de donnes crelocalement et dune complexit arbitraire. Cest lobjet de donne (DO)
du Proxy.
Dans ce cas, les moyens pour interagir avec cet objet impliquentprobablement des accesseurs synchrones aux donnes. On peutexposer tout ou partie des proprits et mthodes de lobjet dedonnes ou une rfrence celui-ci. En plus dexposer des mthodespour actualiser les donnes, il est aussi possible denvoyer au reste dusystme, des notifications signalant la modification de ces donnes.
Un proxy distant pourrait tre utilis pour encapsuler linteraction avecun service distant en charge de sauvegarder ou de rcuprer un blocde donnes. Le proxy peut conserver lobjet communiquant avec leservice distant et contrler laccs aux donnes changes avec ceservice.
-
8/8/2019 French - PureMVC IIBP Translation
39/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 39 de 50 4/15/2008 3:45 PM
Proxys
Dans un tel cas, on doit pouvoir dfinir une donne ou appeler une
mthode du proxy puis attendre une notification asynchrone mise parle proxy lorsque le service reoit la donne.
Responsabilits dun proxy concret
Le proxy concret nous permet dencapsuler une partie du modle dedonnes, do quelle vienne et quel que soit son type, en grant unobjet de donnes ainsi que son accs par lapplication.
Limplmentation de Proxy fournie avec PureMVC est un simpleobjet conteneur de donnes qui peut tre enregistr avec lemodle.
Bien quelle soit parfaitement utilisable sous cette forme, voussous-classerez plutt la classe Proxy et ajouterez ensuite les
fonctionnalits spcifiques un proxy particulier.
Les variations habituelles du pattern Proxy sont :
o Proxy distant, dans lequel les donnes gres par le
proxy concret se trouvent distance et sont
manipuls via un service quelconque.
o Proxy et dlgu, ou laccs un objet service doit
tre partag entre diffrents proxys. La classe
Delegate maintient lobjet service, contrle son accs
et sassure ainsi que les rponses sont acheminesaux bons requrants.
o Proxy de protection, utilis lorsque les objets doivent
avoir diffrents droits daccs.
-
8/8/2019 French - PureMVC IIBP Translation
40/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 40 de 50 4/15/2008 3:45 PM
Proxys
Responsabilits dun proxy concret
o Proxy virtuel, qui cre la demande des objets
volumineux ou complexes.
o Proxy intelligent, qui charge lobjet de donnes en
mmoire lors de laccs initial, gre un compteur de
rfrences et permet son verrouillage afin de
prvenir toute modification par un autre objet.
Transtyper implicitement un objet de donnes
Limplmentation de base du Proxy fournie avec PureMVC acceptecomme arguments du constructeur un nom et un objet gnriqueVous pouvez dynamiquement dfinir lobjet de donnes du proxyaprs sa construction via la mthode setData.
Comme pour le mdiateur et son composant visuel, vous devrezfrquemment transtyper cet Objet en son type actuel, afin de
pouvoir accder aux mthodes et proprits quil expose; cestlourd et rptitif et risque de mener des constructions exposantinutilement limplmentation de lobjet de donnes.
Aussi, comme lobjet de donnes est une structure souventcomplexe, nous avons besoin de rfrences nommes pour lesdiffrentes parties de la structure ainsi quune rfrence pointantsur la structure elle-mme.
A nouveau, les accesseurs implicites dActionscript se rvlent trspratiques pour viter les frquents transtypage et les problmesinsouponns dimplmentation.
-
8/8/2019 French - PureMVC IIBP Translation
41/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 41 de 50 4/15/2008 3:45 PM
Proxys
Transtyper implicitement un objet de donnes
Dans votre proxy concret, utilisez un getter implicite qui transtype
lobjet de donnes en son type courant et donnez-lui un nom
significatif.
Par ailleurs, il est possible de dfinir plusieurs getters de typesdiffrents pour rcuprer des parties spcifiques de lobjet dedonnes.
Par exemple:
publicfunctionget searchResultAC () : ArrayCollection
{
return data as ArrayCollection;
}publicfunction getResultEntry( index:int ) : SearchResultVO
{
return searchResultAC.getItemAt( index ) as SearchResultVO;
}
Dans le mdiateur, plutt que:
var item:SearchResultVO =
ArrayCollection ( searchProxy.getData() ).lastResult.getItemAt( 1 ) as SearchResultVO;
Nous pouvons crire:
var item:SearchResultVO = searchProxy.resultEntry( 1 );
-
8/8/2019 French - PureMVC IIBP Translation
42/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 42 de 50 4/15/2008 3:45 PM
Proxys
Empcher le couplage aux mdiateurs
Contrairement au mdiateur, le proxy ntant pas concern parltat de la vue, il nest jamais interrog sur les notifications quilintresse et nest jamais averti (notifi) de lenvoi dune dentre-elles. Le proxy expose plutt des mthodes et des propritsdestines tre utilises par les autres acteurs.
Le proxy concret ne devrait pas utiliser les mdiateurs pour
informer le systme des changements de lobjet de donnes.
la place, il devrait envoyer des notifications qui seront traites parles commandes ou les mdiateurs. La faon dont le systme estaffect par ces notifications ne devrait pas avoir de consquencesur le proxy.
En gardant le modle indpendant des implmentations dusystme, la vue et le contrleur peuvent tre r-agencs sansaffecter le modle.
Linverse nest pas totalement vrai. Le modle peut difficilementchanger sans affecter la vue, ni le contrleur ventuellement. Aprstout, ces tiers nexistent que pour permettre lutilisateurdinteragir avec le modle.
Encapsuler la logique domaine dans les proxys
Un changement dans le modle impliquera souvent un
ragencement des parties vue/contrleur. En nous assurant deplacer dans les proxys le maximum de la logique domaine, nous
augmentons le degr de sparation entre le modle dune part et
les intrts combins de la vue et du contrleur dautre part.
-
8/8/2019 French - PureMVC IIBP Translation
43/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 43 de 50 4/15/2008 3:45 PM
Proxys
Encapsuler la logique domaine dans les proxys
Le proxy peut tre utilis non seulement pour contrler laccs auxdonnes mais aussi pour les traiter afin de les garder dans un tatvalide.
Par exemple, le calcul dune taxe de vente est une fonction de lalogique domaine et devrait donc se trouver dans un proxy, et nondans un mdiateur ni dans une commande.
Bien que cette fonction puisse se trouver dans nimporte lequel deces tiers, le choix du proxy nest pas seulement logique maispermet un ragencement plus lger et plus facile des autres tiers.
Un mdiateur peut rcuprer le proxy; appeler sa fonction de calculde taxe, lui passer ventuellement les lments dun formulaire.Mais placer ce traitement dans le mdiateur quivaudrait placer lalogique domaine dans la vue. Ce calcul est une rgle du modle dedomaine et la vue ne le voit que comme une proprit du modle
de domaine, disponible lorsque les valeurs dentres sont fournies.
Imaginez que vous travaillez sur une RIA prvue pour fonctionnerdans le navigateur internet dun ordinateur de bureau. Une nouvelleversion, pour PDA cette fois, doit tre dveloppe avec un jeu defonctionnalits rduit, mais avec lintgralit des exigences dumodle de lapplication actuelle.
Avec une sparation adquate des responsabilits, nous devrions
pouvoir rutiliser le modle dans sa totalit et lui adjoindreuniquement une nouvelle vue et un nouveau contrleur.
-
8/8/2019 French - PureMVC IIBP Translation
44/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 44 de 50 4/15/2008 3:45 PM
Proxys
Encapsuler la logique domaine dans les proxys
Placer la fonction de calcul dans le mdiateur peut sembler efficaceou facile lors de limplmentation ; vous avez simplement pris lesdonnes depuis un formulaire pour les traiter et les placer dans lemodle.
Toutefois, pour chaque version de votre application, vous devrezalors dupliquer vos efforts ou copier/coller la logique de calcul de lataxe de vente dans une nouvelle vue compltement diffrente,
plutt que dy accder automatiquement par linclusion dunelibrairie constituant votre modle.
Interagir avec des proxys distants
Un proxy distant est simplement un proxy qui obtient son objet dedonnes depuis une source distante. Cela signifie habituellementque nous interagissons avec cet objet de faon asynchrone.
La faon utilise pour que le proxy obtienne ses donnes dpend dela plateforme client, de limplmentation du service distant, et desprfrences du dveloppeur. Dans un environnement Flash/Flex,nous pourrions employer HTTPService, WebService,
RemoteObject, DataService ou encore XMLSocket afin de lancer
des requtes de service depuis un proxy.
Selon les spcifications, un proxy distant peut soit transmettre desrequte dynamiquement, en rponse la dfinition dune propritou lappel dune mthode; soit faire une requte unique lors de saconstruction puis fournir ensuite un accs aux donnes rcupres.
Plusieurs optimisations peuvent tre appliques au proxy pouraccrotre lefficacit de la communication avec un service distant.
-
8/8/2019 French - PureMVC IIBP Translation
45/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 45 de 50 4/15/2008 3:45 PM
Proxys
Interagir avec des proxys distants
On peut le construire en mettant en cache les donnes afin derduire les bavardages rseau; ou en envoyant des mises jouraux seuls blocs de donnes ayant t modifis, et ce afin de rduirela consommation de la bande passante.
Si une requte est dynamiquement invoque sur un proxy distantpar un autre acteur du systme, le proxy doit pouvoir alors envoyerune notification la rception des donnes.
Les parties intresses par cette notification ne sont pas forcmentcelles qui ont inities la requte.
Par exemple, linvocation dune recherche via un service distant etlaffichage du rsultat pourrait se faire selon les tapes suivantes :
o Un composant visuel initie une recherche endiffusant un vnement.
o Son mdiateur rpond en rcuprant le proxy distantappropri et en dfinissant la propritsearchCriteria
o La proprit searchCriteria du proxy est en fait un
setter implicite qui stocke la valeur, initialise larecherche via un objet HTTPService puis coute cet
objet en attente dun vnement signalant un
rsultat ou un incident.
-
8/8/2019 French - PureMVC IIBP Translation
46/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 46 de 50 4/15/2008 3:45 PM
Proxys
Interagir avec des proxys distants
o Le service diffuse en retour un vnementResultEvent auquel le proxy rpond en plaant
lobjet rsultant dans une de ses propritspubliques (data).
o Le proxy envoie alors une notification indiquant lesuccs du service et place dans son contenu unerfrence lobjet de donnes.
o Un autre mdiateur a prcdemment manifest sonintrt pour cette notification et il y rpond enassignant les donnes obtenues une propritdataProvider du composant visuel associ.
Ou considrez un LoginProxy qui dtient un value objetLoginVO (une classe ne contenant que des donnes). CeloginVO pourrait ressembler cela :
package com.me.myapp.model.vo
{
// Mappe le VO la classe distante suivante
[RemoteClass(alias="com.me.myapp.model.vo.LoginVO")]
[Bindable]
publicclass LoginVO
{
publicvar username: String;
publicvar password: String;
publicvar authToken: String; // dfini par le serveur si lidentification est valide}
}
-
8/8/2019 French - PureMVC IIBP Translation
47/50
PureMVC est un framework open-source et gratuit cr et gr par Futurescale, Inc. Copyright 2006-08, Droits rservs. La rutilisation est gre par le CreativeCommons 3.0 Attribution US License. PureMVC, incluant le prsent document, tout support de formation ou code source de dmonstration tlchargs depuis le site deFuturescale sont fournis en ltat sans garantie daucune sorte, expresse ou implicite, incluant notamment les garanties implicites dadquation, ou la garantie de non
violation.
Implmentation Idiomes & Meilleures Pratiques.doc Page 47 de 50 4/15/2008 3:45 PM
Proxys
Interagir avec des proxys distants
LoginProxy expose des mthodes pour dfinir lidentification, grerles sessions (login/logout) et rcuprer les jetons dautorisationinclus dans les appels au service qui suivent le login conformment la logique dauthentification suivante :
LoginProxy:package com.me.myapp.model
{
import mx.rpc.events.FaultEv