French - PureMVC IIBP Translation

download French - PureMVC IIBP Translation

of 50

Transcript of 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