+ All Categories
Home > Documents > German - PureMVC IIBP Translation

German - PureMVC IIBP Translation

Date post: 09-Apr-2018
Category:
Upload: cliff-hall
View: 228 times
Download: 0 times
Share this document with a friend

of 52

Transcript
  • 8/8/2019 German - PureMVC IIBP Translation

    1/52

    AUTHOR: Cliff Hall BERSETZUNG: Jens Krause, www.websector.de

    STAND: 11.05.2008

    ImplementierungIdiome

    undOptimale Anwendung

    Entwicklung von robusten, skalier- und pflegbaren

    Client-Anwendungen mit PureMVC.

    Mit Beispielen in ActionScript 3 und MXML.

    ViewComponents

    Data ObjectsLocal 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

  • 8/8/2019 German - PureMVC IIBP Translation

    2/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 2 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau 4

    Model & Proxies 4

    View & Mediators 4

    Controller & Commands 5

    Faade & Core 5

    Observers & Notifications 6

    Notifications knnen benutzt werden, um Commands auszufhren 6

    Mediators versenden, empfangen und bekunden Interesse anNotifications 7

    Proxies senden, aber empfangen keine Notifications 7

    Faade 8

    Was ist eine konkrete Faade? 9

    Erstellen einer konkreten Faade in einer Applikation 10

    Initialisieren einer konkreten Faade 12

    Notifications 14

    Events vs. Notifications 15

    Definieren von Notification- und Event-Konstanten 17

    Commands 18

    Verwendung von Macro- und SimpleCommands 18

    Loses Koppeln von Commands zu Mediators und Proxies 19

    Inszenierung von komplexen Aktionen und die 'Business Logic' 20

  • 8/8/2019 German - PureMVC IIBP Translation

    3/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 3 of 52 5/12/2008 18:05 A5/P5

    Mediators 26

    Zustndigkeit des konkreten Mediators 27

    Erforderliches Casten der View Component 28

    View Component zuhren und antworten 29

    Verarbeiten von Notifications in dem konkreten Mediator 32

    Verbindung von Mediators zu Proxies und anderen Mediators 35

    User Interaktion mit View Components und Mediators 36

    Proxies 41 Zustndigkeit des konkreten Proxy 42

    Erforderliches Casten des Data Object 43

    Vermeidung von engen Verbinden zu Mediators 44

    Kapseln der 'Domain Logic' in Proxies 45

    Interaktion mit Remote Proxies 47

    Inspiration

    PureMVC ist ein auf Entwurfsmuster basierendesFramework, welches einst aus der Notwendigkeitheraus entstand, leistungsstarke Rich InternetAnwendungen zu entwickeln. PureMVC istmittlerweile in weiteren Sprachen und Plattformen(inklusive Serverumgebungen) portiert worden. DiesesDokument ist schwerpunktmig fr die Client-Seitegeschrieben.

    Whrend die Interpretation und Implementation frjede von PureMVC untersttzte Plattform spezifisch ist,basieren alle benutzten Entwurfsmuster auf denDefinitionen des genialen 'Gang of Four' Buches:Entwurfsmuster: Elemente wiederverwend-

    barer objektorientierter Software(ISBN 3-8273-2199-9) uerst empfehlenswert!

  • 8/8/2019 German - PureMVC IIBP Translation

    4/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 4 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau

    Das PureMVC Framework hat ein sehr klares Ziel: Eine Hilfe zu bieten,

    um die Coding-Interessen einer Applikation in drei eigenstndigeBereiche zu unterteilen: Model, View und Controller.

    Diese Unterteilung von Interessen sowie die geringe Verwendung vonengen Verbindungen und Ausrichtungen zwischen den drei Bereichenuntereinander sind hchst bedeutsam fr die Entwicklung vonskalierbaren und pflegbaren Anwendungen.

    Bei der Implementation des klassischen MVC-Architekturmusters

    werden diese drei Bereiche ber Singletons (eine Klasse, bei der nureine Instanz erstellt wird) verwaltet. Diese Singletons sind auch sobenannt: Model, View, Controller. Zusammen werden sie als'Hauptakteure' bezeichnet.

    Ein vierter Singleton, die sogenannte Faade, bietet ein Interface, umdie Kommunikation zwischen den Hauptakteuren einfach zu halten.

    Model & Proxies

    Das Model hlt benannte Referenzen zu den Proxies. Der Code vomProxy beinflusst das Daten-Model und kommuniziert mit Remote-Services, falls die Daten persistent gehalten oder neu abgefragtwerden sollen.

    Das Ergebniss ist ein portierbarer Code im Bereich des Models.

    View & Mediators

    Der View hlt in erster Linie benannte Referenzen zu den Mediators.Der Code der Mediatoren verwaltet View Components und fgtdafr Event Listener hinzu. Ein Mediator versendet oder empfngt

  • 8/8/2019 German - PureMVC IIBP Translation

    5/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 5 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau

    View & Mediators

    Notifications zum bzw. vom Rest des Systems, um den State derView Component zu beeinflussen.

    Das trennt die Definition des Views und seiner Logik, von welcheres gesteuert wird.

    Controller & Commands

    Der Controller hlt benannte Mappings zu Command-Klassen,welche zustandslos sind und nur erstellt werden, falls sie bentigtwerden.

    Commands knnen mit Proxies interagieren und diese abfragen. Sieknnen Notifications senden und weitere Commands ausfhren.Auch werden sie oft benutzt, um komplexe oder systemweiteAktionen auszufhren, wie z.B. das Starten oder Beenden einerApplikation. Commands stellen innerhalb der Applikation den

    Bereich der Business Logic dar.

    Faade & Core

    Die Faade, ein weiteres Singleton, initialisiert die Hauptakteure(Model, View und Controller). Sie bietet den Ort, um alleffentlichen Methoden der Hauptakteure aufzurufen.

    Mit der Vererbung der Faade durch eine konkrete Faade, erhltdie Applikation alle Leistungen der Hauptakteure, ohne jedoch diesezu importieren oder mit ihnen direkt arbeiten zu mssen. Dazu istlediglich einmal eine konkrete Faade in die Applikation zuimplementieren.

  • 8/8/2019 German - PureMVC IIBP Translation

    6/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 6 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau

    Faade & Core

    Proxies, Mediators und Commands knnen so die konkrete Faadeder Applikation nutzen, um untereinander zu kommunizieren.

    Observers & Notifications

    PureMVC Applikationen knnen in Umgebungen laufen, welchekeine Event- oder EventDispatcher-Klassen von Flash benutzen. Ausdiesem Grund benutzt das Framework ein eigenes Beobachter-

    Benachrichtigungs-Model, um zwischen den Hauptakteuren vonMVC und anderen Teilen des Systems auf eine lose gekoppelte Artzu kommunizieren.

    ber die Details des Beobachter-Benachrichtigungs-Modelsinnerhalb von PureMVC braucht man sich keine weiteren Gedankenmachen. Es ist eine interne Angelegenheit des Frameworks. Umeine Notification von einem Proxie, Mediator, Command oder vonder Faade selbst zu versenden, ist lediglich ein Aufruf einer

    einfachen Methode notwendig. Dazu muss nicht einmal eine Instanzeiner Notification erstellt werden.

    Notifications knnen benutzt werden, um Commands auszufhren

    Innerhalb der konkreten Faade werden Commands mit den Namender Notifications gemappt. Dadurch fhrt der Controller automatischden Command aus, sobald die zuvor gemappte Notification

    versendet wird. Commands fhren blicherweise komplexeInteraktionen zwischen den Interessen des Views und des Modelsaus, obwohl sie ber beide so wenig wie mglich wissen.

  • 8/8/2019 German - PureMVC IIBP Translation

    7/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 7 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau

    Mediators versenden, empfangen und bekunden Interesse anNotifications

    Sobald die Mediators mit dem View registriert werden, werden ihreInteressen an Notifications ber das Aufrufen der Methode'listNotifications' abgefragt. Diese Methode muss als Rckgabewertein Array mit den Namen von Notifications geben, an denen einMediator interessiert ist.

    Spter, wenn eine Notification von irgendeinem Akteur im Systemversendet wird, wird bei den Mediators, welche ihr Interesse ber

    den Namen dieser Notification angegeben haben, die Methode'handleNotification' aufgerufen. Dieser Methode wird eine Referenzzu der Notification bergeben.

    Proxies senden, aber empfangen keine Notifications

    Proxies knnen Notification aus unterschiedlichen Grndenversenden: Zum Beispiel benachrichtigt ein Remote Service Proxy

    das System, wenn ein Ergebnis vorliegt. Oder ein Proxy, vonwelchem die Daten aktualisiert wurden, versendet eine 'change'Notification.

    Ein Proxy, welcher auf eine Notification hrt, ist zu sehr an denBereichen von View und Controller gekoppelt.

    Diese beiden Bereiche wiederum mssen unbedingt aufNotifications von Proxies hren, falls sie die Funktion haben, Model-

    Daten, welche von den Proxies gehalten werden, zu visualisierenoder dem User eine Interaktion mit diesen Daten zu ermglichen.

    Dennoch sollten die Bereiche von View und Controller auchvernderbar sein, ohne dass der Bereich des Models inMitleidenschaft gezogen wird.

  • 8/8/2019 German - PureMVC IIBP Translation

    8/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 8 of 52 5/12/2008 18:05 A5/P5

    PureMVC Aufbau

    Proxies senden, aber empfangen keine Notifications

    Zum Beispiel: Eine Administration- und eine dazugehrige User-Anwendung teilen sich mglicherweise die gleichen Klassen imBereich des Models. Falls sich nur die Anwendungsflleunterscheiden, knnen diese ber unterschiedliche View- undController-Zusammenstellungen mit dem gleichen Model ausgefhrtwerden.

    Faade

    Die drei Hauptakteure des MVC Architekturmusters werden beiPureMVC durch die Model-, View- und Controller-Klassen reprsentiert.Um den Prozess der Anwendungsentwicklung zu vereinfachen,verwendet PureMVC das Faade Entwurfsmuster.

    Die Faade vermittelt die Anfragen zum Model, View und Controller.Dadurch mssen die Klassen der Hauptakteure nie im Code importiert

    werden, auch wird nicht mit diesen Klassen direkt gearbeitet. DieFaade instanziiert automatisch die Haupt-MVC-Singletons in ihremKonstruktor.

    blicherweise wird die Faade des Frameworks durch eine konkreteFaade vererbt, welche den Controller mit dem Command Mappinginitialisiert. Die Bereitstellung von Model und View erfolgt berCommands, welche von dem Controller ausgefhrt werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    9/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 9 of 52 5/12/2008 18:05 A5/P5

    Faade

    Was ist eine konkrete Faade?

    Auch wenn die Hauptakteure komplett und einsetzbarimplementiert sind, bietet die Faade eine abstrakte undwohlberlegte Implementierung, damit diese niemals direktinstanziiert werden muss.

    Stattdessen wird eine ber die Vererbung der Framework Faadeeine konkrete Faade erstellt, welche Methoden berschreibt oderauch hinzufgt, damit sie in der Applikation ntzlich ist.

    ber diese konkrete Faade werden Commands, Mediators undProxies aufgerufen und benachrichtigt. Damit erledigt sie dieeigentliche Arbeit des Systems. Gewhnlich wird die konkreteFaade 'ApplicationFacade' genannt. Aber man kann sie auchbennen, wie man mchte.

    Generell wird die View Hierarchie (Display Komponenten) nacheinem Prozess erstellt, welcher von der Plattform abhngt. In Flexinstantiiert eine MXML Applikation ihre Children oder ein Flashfilm

    erstellt alle Objekte auf seiner Bhne. Sobald die View Hierarchieder Applikation erstellt ist, wird das PureMVC System gestartet unddie Bereiche des Models und Views fr die Benutzung vorbereitet.

    Die konkrete Faade wird ebenso eingesetzt, um den StartupProzess in einem Weg zu ermglichen, dass die Hauptapplikation sogut wie nichts von dem PureMVC System wei. Dazu wird lediglicheine Referenz der Applikation ber die 'startup' Methode derSingleton-Instanz der konkreten Faade angegeben.

  • 8/8/2019 German - PureMVC IIBP Translation

    10/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 10 of 52 5/12/2008 18:05 A5/P5

    Faade

    Erstellen einer konkreten Faade in einer Applikation

    Die konkrete Faade braucht nicht viel zu tun, um die Applikationmit gengend Power zu versehen. Dazu folgende Implementierung: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.*;

    // A concrete Facade for MyApp

    publicclass ApplicationFacade extends Faade implements IFacade

    {

    // Define Notification name constants

    public static const STARTUP:String = "startup";

    public static const LOGIN:String = "login";

    // Singleton ApplicationFacade Factory Method

    public staticfunction getInstance() : ApplicationFacade

    {

    if ( instance == null ) instance = new ApplicationFacade( );return instance as ApplicationFacade;

    }

    // Register Commands with the Controller

    override protectedfunction initializeController( ) : void

    {

    super.initializeController();

    registerCommand( STARTUP, StartupCommand );

    registerCommand( LOGIN, LoginCommand );

    registerCommand( LoginProxy.LOGIN_SUCCESS, GetPrefsCommand );

    }

    // Startup the PureMVC apparatus, passing in a reference to the application

    public function startup( app:MyApp ) : void

    {

    sendNotification( STARTUP, app );

    }

    }

    }

  • 8/8/2019 German - PureMVC IIBP Translation

    11/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 11 of 52 5/12/2008 18:05 A5/P5

    Faade

    Erstellen einer konkreten Faade in einer Applikation

    Ein paar Erluterungen zum vorangegangenen Code:

    o Die 'ApplicationFacade' erbt von der PureMVC Faade,welche das 'IFacade' Interface implementiert.

    o Die 'ApplicationFacade' berschreibt nicht denKonstruktor. Wenn sie dies tte, msste sie denKonstruktor der Super-Klasse aufrufen, bevor sieirgendetwas machen kann.

    o Die 'ApplicationFacade' definiert eine statische'getInstance' Methode, welche die Singleton-Instanzzurckgibt, die zuvor erstellt und ggf.zwischengespeichert wird. Die Referenz zu der Instanzwird in einer 'protected' Eigenschaft in der Super-Klasse(Faade) gehalten und muss in der Sub-Klasse gecastetwerden, bevor sie zurckgegeben wird.

    o Die 'ApplicationFacade' definiert die Namen derNotifications als Konstanten. Da die 'ApplicationFacade'der zentrale Ort fr alle anderen im Systems ist, umsich untereinander zu verbinden und miteinander zukommunizieren, ist sie auch der perfekte Ort fr dieseKonstanten, welche von den Partizipanten derNotifications benutzt werden.

    o Die 'ApplicationFacade' initialisiert den Controller mit

    Commands. Diese Commands werden ausgefhrt,sobald die zugeordneten Notifications versendetwerden.

  • 8/8/2019 German - PureMVC IIBP Translation

    12/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 12 of 52 5/12/2008 18:05 A5/P5

    Faade

    Erstellen einer konkreten Faade in einer Applikation

    o Die ApplicationFacade stellt eine 'startup' Methode zuVerfgung, welche als Argument eine Referenz zurApplikation erhlt (in diesem Fall vom Typ 'MyApp').Durch das Versenden der 'STARTUP' Notification wirdder 'StartupCommand' ausgelst und ebenfalls eineReferenz zur Applikation bergeben. Der'StartupCommand' ist dem Notification NamenSTARTUP zugeordnet.

    Mit dieser einfachen Implementierung von Anforderungenbernimmt die konkrete Faade ziemlich viel von derFunktionalitt ihrer Abstrakten Super-Klasse.

    Initialisierung einer konkreten Faade

    Der Konstruktor der PureMVC Faade ruft die 'protected' Methodenfr die Initialisierung der Model-, View- und Controller-Instanzenauf und hlt die Referenzen zu ihnen.

    Mittels Komposition implementiert die Faade die Features vonModel, View und Controller und stellt sie dadurch frei zu Verfgung.Damit vereinigt die Faade die Funktionen der Hauptakteure desFrameworks und hlt zugleich die Entwickler vor der direktenInteraktion mit ihnen ab.

    Wo und wie wird die Faade in einer tatschlichen Applikation

    passend eingebracht? Betrachten Sie dazu die folgende FlexApplikation:

  • 8/8/2019 German - PureMVC IIBP Translation

    13/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 13 of 52 5/12/2008 18:05 A5/P5

    Faade

    Initialisierung einer konkreten Faade

    MyApp.mxml:

  • 8/8/2019 German - PureMVC IIBP Translation

    14/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 14 of 52 5/12/2008 18:05 A5/P5

    Faade

    Initialisierung einer konkreten Faade

    o Beim Abfeuern des 'creationComplete' Events derApplikation ist die 'ApplicationFacade' bereits ber denAufruf der statischen 'ApplicationFacade.getInstance'Methode initialisiert und ebenso Model, View undController bereits erstellt. Zu diesem Zeitpunkt sindallerdings noch keine Mediators oder Proxies kreiert.

    o Beim 'creationComplete' Event Handler im Application-Tag wird die 'startup' Methode der 'ApplicationFacade'

    ausgefhrt und eine Referenz zur Hauptapplikationmitgegeben.

    Dabei ist zu beachten, dass die normalen View Components nichtsber die Faade zu wissen brauchen und auch nicht mir ihrinteragieren. Eine Ausnahme stellt die Top-Level Applikation.

    Die Top-Level Applikation (oder Flash-Film) erstellt die View

    Hierarchy, initialisiert die Faade und startet das PureMVC System.

    Notifications

    PureMVC verwendet das Beobachter-Entwurfsmuster (Observerpattern), damit die Hauptakteure und ihre Kollaborateure in einerlosen gekoppelten Art miteinander kommunizieren knnen, ganzunabhngig von der verwendeten Plattform.

    ActionScript verwendet kein Event-Model, welches in Flex und Flashgleich verwendet wird - es stammt von Flash.

  • 8/8/2019 German - PureMVC IIBP Translation

    15/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 15 of 52 5/12/2008 18:05 A5/P5

    Notifications

    Das PureMVC Framework ist mittlerweile fr weitere Plattformen, wiez.B. C# und J2ME, portiert worden und verwaltet dadurch eine eigeneinterne Kommunikation, um nicht von dem Event-Model der FlashPlattform abhngig zu sein.

    Es ist nicht nur ein Ersatz fr Events, sondern Notifications agieren aufeinem ganz anderen Weg. Sie arbeiten mit Events zusammen, damitextrem wiederverwendbare View Components erstellt werden knnen,die nichts von dem PureMVC System und auch nichts von derKoppelung zu dem System wissen. Vorausgesetzt, sie sind richtig

    gebaut.

    Events vs. Notifications

    Events werden von Flash Display-Objekten versendet, welche das'IEventDispatcher' Interface implementiert haben. Das Event kanndurch die Display Hierarchy 'blubbern' und so dem Eltern-Objekt,dem Eltern-Eltern-Objekt usw. erlauben, auf das Event zu

    reagieren.

    Das ist der sogenannte 'chain of responsibility mechanism',wodurch nur diejenigen in der Eltern/Kind Abstammung dieMglichkeit haben, auf das Event zu reagieren, die eine Referenz zudem Dispatcher besitzen, um sich als Listener anzumelden.

    Notifications werden durch die Faade und Proxies versendet.Ebenso knnen sie von Mediators empfangen und versendet

    werden. Notification knnen zu Commands gemappt werden undCommands knnen wiederum auch Notifications versenden.Dahinter verbirgt sich ein Verffentlichen-/Abonnieren-Mechanismus, wobei beliebige Observer (Beobachter) die gleicheNotification empfangen und darauf reagieren knnen.

  • 8/8/2019 German - PureMVC IIBP Translation

    16/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 16 of 52 5/12/2008 18:05 A5/P5

    Notifications

    Events vs. Notifications

    Notifications haben optional einen 'body', welcher ein beliebigesActionScript-Objekt sein kann.

    Es ist nicht wie bei Flash Events notwendig, eine eigeneNotification-Klasse zu erstellen, da die Notifications 'out of the box'bereitgestellt werden. Dennoch knnen auch eigene Notification-Klassen erstellt werden, um eine strenge Typisierungsicherzustellen. Allerdings sollte man dabei abwgen, inwieweit dieenorme berzahl an zustzlichen Notification-Klassen dieeingeschrnkten Vorteile einer Typen-berprfung zur Kompilierzeit(im Besonderen bei Notifications) rechtfertigt. Das ist eine Fragedes Programmierstils.

    Notifications haben auerdem einen optionale Eigenschaft 'type',welche zur Unterscheidung bei den Empfnger benutzt werdenkann.

    Zum Beispiel: Bei einer Applikation zur Dokumenten-Bearbeitung

    kann es eine Proxy-Instanz fr jedes Dokument, welches geffnetist, und einen Mediator fr die dazugehrige View Component,welche das Editieren des Dokuments ermglicht, geben. Proxy undMediator teilen sich dabei eindeutige Keys, welche von dem Proxyals 'type' Eigenschaft der Notification versendet werden.

    Alle Mediators, welche sich fr die Notification des Proxiesangemeldet haben, werden beim Versenden dieser informiert.Dabei knnen sie zustzlich ber die 'type' Eigenschaft der

    Notification entscheiden, ob sie darauf reagieren oder nicht.

  • 8/8/2019 German - PureMVC IIBP Translation

    17/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 17 of 52 5/12/2008 18:05 A5/P5

    Notifications

    Definieren von Notifications- und Event-Konstanten

    Wie wir gesehen haben, ist die konkrete Faade ein guter Ort umKonstanten fr Notifications zu definieren. Da die konkrete Faadeder zentrale Machanismus fr die Interaktion mit dem System ist,werden alle Beteiligten von Notifications standardmig auchMitwirkende bei der Faade.

    Um die Definitionen der Konstanten allein und auch in anderenApplikationen zu verwenden, kann man auch eine separate'ApplicationConstants' Klasse erstellen, anstatt alle Konstanten inder konkreten Faade zu halten.

    In jedem Fall stellen die Namen von Notifications durch zentraldefinierte Konstanten eine Typisierung sicher. Der Kompiler kanndiese berprfen, wogegen bei der Verwendung von einfachenZeichenketten bei Schreibfehlern keine Fehlermeldungenauftauchen werden.

    Namen von Events sind niemals in der konkreten Faade zu

    erstellen. Event-Namen sind nur in den Klassen, welche die Eventsgenerieren oder in den Event-Klassen selbst zu erstellen.

    Aufgrund der uerlichen Grenzen der Applikation, sollten ViewComponents und Daten-Objekte nur ber Events mit ihrenMediators oder Proxies kommunizieren. Sie sollten keineNotification versenden und auch keine Methoden von ihrenMediators oder Proxies aufrufen.

    Wenn eine View Component oder ein Daten-Objekt einen Eventabfeuert, welcher vom dazugehrigen Mediator oder Proxy abgehrtwird, dann brauchen nur die Beteiligten den entsprechendemEvent-Namen kennen. Weitere Kommunikation zwischen denEmpfngern und dem Rest des PureMVC Systems erfolgt berNotifications.

  • 8/8/2019 German - PureMVC IIBP Translation

    18/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 18 of 52 5/12/2008 18:05 A5/P5

    Notifications

    Definieren von Notifications- und Event-Konstanten

    Die Beziehung dieser Paare (Mediator/ViewComponent undProxy/Data-Object) ist notwendigerweise etwas eng, zum Rest derApplikation jedoch lose gekoppelt. Das schafft Raum fr mehreigenstndiges Refactoring der Model-Daten oder dem User-Interface, falls es notwendig wird.

    Commands

    Die konkrete Faade initialisiert blicherweise den Controller ber dasMapping von Notification und Commands, welche beim Start bentigtwerden.

    Fr jedes Mapping registriert sich der Controller selbst als Observer(Beobachter) fr die vorgegebenen Notifications. Sobald der Controllerinformiert wird, instanziiert er den Command, welcher der Notificationzugeordnet wurde, und ruft die 'execute' des Commands auf. Dabei

    wird dem Command die Notification bergeben.

    Commands sind zustandslos. Sie werden nur erstellt, wenn siebentigt werden und verschwinden wieder, sobald sie ausgefhrtwurden. Aus diesem Grund ist es wichtig, dass niemals ein Commandinstanziiert und auch keine Referenz in 'lnger-lebenden' Objektengehalten wird.

  • 8/8/2019 German - PureMVC IIBP Translation

    19/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 19 of 52 5/12/2008 18:05 A5/P5

    Commands

    Verwendung von Macro- und SimpleCommands

    Wie alle Klassen des PureMVC Frameworks implementierenCommands ein Interface. Es ist das 'ICommand' Interface. PureMVCbeinhaltet zwei 'ICommand' Implementationen, welche sich leichterweitern lassen.

    Die 'SimpleCommand' Klasse hat lediglich eine 'execute' Methode,welche eine 'Inotification' Instanz akzepiert. Alles was zu tun ist, isteine 'execute' Methode im Code einzufgen.

    Die 'MacroCommand' Klasse erlaubt das sequenzielle Ausfhren vonmehreren Subcommands, denen ebenfalls eine Referenz zu deroriginal Notification bergeben wird.

    Ein 'MacroCommand' ruft seine 'initializeMacroCommand' Methodeinnerhalb seines Konstruktors auf. Diese Methode ist von allenUnterklassen zu berschreiben, um darin die 'SubCommands' berdie 'addSubCommand' Methode hinzuzufgen. Dabei knnenbeliebige Kombinationen aus 'Simple-' oder 'MacroCommands'

    hinzugefgt werden.

    Loses Koppeln von Commands zu Mediators und Proxies

    Commands werden durch den Controller als Ergebnis einergesendeten Notification ausgefhrt. Commands sollten nur vomController und niemals von einem anderen Akteur instanziiert undausgefhrt werden.

    Um mit anderen Teilen des Systems zu kommunizieren und zuinteragieren, knnen Commands:

  • 8/8/2019 German - PureMVC IIBP Translation

    20/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 20 of 52 5/12/2008 18:05 A5/P5

    Commands

    Loses Koppeln von Commands zu Mediators und Proxies

    o die bestehenden Registrierungen von Mediators, Proxies undCommands berprfen, diese entfernen oder registrieren

    o Notifications versenden, welche von anderen Commands oderMediators beantwortet werden

    o Proxies und Mediators abfragen und diese direkt manipulieren

    Durch Commands knnen recht einfach die Elemente vom View ineinen bestimmten State gebracht oder Daten in verschiedene Teiledes Views transportiert werden.

    Sie knnen auch benutzt werden, um transaktionsbezogeneInteraktionen mit dem Model auszufhren, welche ber mehrereProxies verteilt sind und Notifications versendet werden mssen,sobald die gesamte Transaktion komplett ist. Oder auch zumVerarbeiten von Ausnahmen und weiteren Aktionen bei Fehlern.

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    An verschiedenen Orten wird innerhalb der Applikation Codeplatziert (Commands, Mediators und Proxies). Die Frage wird immerwieder und notwendigerweise sein:

    Welcher Code gehrt wohin? Was genau sollte ein Command tun?

    Der erste Schritt ist die Unterscheidung der Applikation in eine'Business Logic' und in eine 'Domain Logic'.

  • 8/8/2019 German - PureMVC IIBP Translation

    21/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 21 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    Commands beherbergen die 'Business Logic' der Applikation.Technisch gesehen bedeutet die Implementation vonAnwendungsfllen in einer Applikation das Abfragen des 'DomainModels'. Das beinhaltet die Koordination der Zustnde von Modelund View.

    Das Model hlt seine Ganzheit durch die Verwendung von Proxiesaufrecht. Diese beinhalten die 'Domain Logic' und bieten eine APIfr die Manipulation von Daten-Objekten. Damit kapseln sie dengesamten Zugriff auf das Daten-Model, welches sich entweder aufClient- oder Serverseite befindet. Der Rest der Applikation kanndadurch auf die Daten synchron oder asynchron zugreifen.

    Commands knnen fr komplexe Systemverhalten eingesetztwerden, welche in einer besonderen Reihenfolge erfolgen mssenund, falls es mglich ist, das Ergebnis von der einen fr die nchsteAktion zufhren.

    Mediators und Proxies sollten den Commands (und jedem anderenauch) ein 'course-grained' Interface offenlegen, welches dieImplementation der zugeordneten View Components oder DataObjects verdeckt.

    Wenn von View Components die Rede ist, sind zum Beispiel einButton oder ein Widget gemeint, mit denen der User direktinteragiert. Mit Data Objects sind Objekte gemeint, welche beliebigeStrukturen aufweisen knnen. Diese Objekte beinhalten Daten oder

    auch Remote-Services, welche aufgerufen oder gehalten werdenknnen.

  • 8/8/2019 German - PureMVC IIBP Translation

    22/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 22 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    Commands interagieren mit Mediators und Proxies, sollten aberisoliert von den angrenzenden Implementationen sein. BetrachtenSie dazu die folgenden Commands, welche zur Vorbereitung desSystems eingesetzt werden:

    StartupCommand.as:

    package com.me.myapp.controller

    {

    import org.puremvc.as3.interfaces.*;

    import org.puremvc.as3.patterns.command.*;

    import com.me.myapp.controller.*;

    // A MacroCommand executed when the application starts.

    publicclass StartupCommand extends MacroCommand

    {

    // Initialize the MacroCommand by adding its subcommands.

    overrideprotectedfunction initializeMacroCommand() : void

    {

    addSubCommand( ModelPrepCommand );

    addSubCommand( ViewPrepCommand );

    }}

    }

    Das ist ein 'MacroCommand', der zwei Subcommands hinzufgt.Sobald der 'MacroCommand' ausgefhrt wird, werden dieSubcommands in der angegebenen Reihenfolge nacheinanderausgefhrt.

    Das bildet einen Top Level Ablauf von Aktionen, welche beim Start

    durchgefhrt werden. Aber was sollte genau und in welcherReihenfolge gemacht werden?

    Bevor dem User irgendwelche Daten der Applikation prsentiertwerden knnen und bevor der User mit diesen Daten interagieren

  • 8/8/2019 German - PureMVC IIBP Translation

    23/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 23 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    kann, muss das Model in einen konsistenten und bekanntenZustand gebracht werden. Sobald dieser Zustand erreicht ist, kannder View vorbereitet werden, um die Daten des Modelsdarzustellen. Dann kann der User mit diesen Daten interagieren undmanipulieren.

    Dafr ist es normalerweise notwendig, beim Start der Applikationzwei grere Aktivitten auszufhren: Die Vorbereitung des Models,gefolgt von der Vorbereitung des Views.

    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.*;

    // Create and register Proxies with the Model.

    publicclass ModelPrepCommand extends SimpleCommand

    {

    // Called by the MacroCommand

    override publicfunction execute( note : INotification ) : void

    {

    facade.registerProxy( new SearchProxy() );

    facade.registerProxy( new PrefsProxy() );

    facade.registerProxy( new UsersProxy() );

    }

    }

    }

    Die Vorbereitung des Models besteht normalerweise nur aus einereinfachen Erstellung und Registierung von Proxies, welche beimStart bentigt werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    24/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 24 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    Der obere 'ModelPrepCommand' ist ein 'SimpleCommand', welcherdie Verwendung des Models vorbereitet. Da er der ersteSubcommand des 'MacroCommands' ist, wird er zuerst ausgefhrt.

    Mit Hilfe der konkreten Faade werden die Proxies erstellt undregistriert, welche das System zu Beginn bentigt. Beachten Sie,dass der Command dabei keine Manipulation oder Initialisierung derModel Daten vornimmt. Dafr sind die Proxies selbst verantwortlich,wozu auch das Abfragen von Daten und die Vorbereitung der DataObjects, welche von dem System verwendet werden, zhlen.

    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.*;

    // Create and register Mediators with the View.

    publicclass ViewPrepCommand extends SimpleCommand

    {

    override publicfunction execute( note : INotification ) : void

    {

    var app:MyApp = note.getBody() as MyApp;

    facade.registerMediator( new ApplicationMediator( app ) );

    }

    }

    }

    Der 'ViewPrepCommand' ist ein 'SimpleCommand', welcher dieVerwendung der Views vorbereitet. Es ist der letzte Subcommandsinnerhalb des o.g. 'MacroCommands' und wird deshalb auch zuletztausgefhrt.

  • 8/8/2019 German - PureMVC IIBP Translation

    25/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 25 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    Beachten Sie, dass dabei nur ein Mediator erstellt und registriertwird. Es ist der 'ApplicationMediator', welcher der View Component'Application' zugeordnet ist.

    Dem Konstruktor des Mediators wird ferner die 'body' Eigenschaftder Notification bergeben. Das ist eine Referenz zur Applikation,welche die Applikation selbst als 'body' Eigenschaft der STARTUPNotification angab, als diese versendet wurde. Vergleichen Sie dazudas vorherige 'MyApp' Beispiel.

    Die Applikation ist soetwas wie eine spezielle View Component, inwelcher sie selbst instanziiert wird und als Children alle anderenView Components trgt, welche ebenfalls beim Start der Applikationinitialisiert werden.

    Um mit dem Rest der Applikation zu kommunizieren, braucht eineView Component einen Mediator. Und um diese Mediators zuerstellen, sind Referenzen zu den View Components notwendig,

    welche vermittelt werden sollen. Zu diesem Zeitpunkt kennt nur dieApplikation diese Referenzen.

    Nur dem Mediator der Applikation ('ApplicationMediator') ist eserlaubt, alles ber die Implementation der Applikation zu wissen.Darum werden die restlichen Mediatoren innerhalb des Konstruktorsdes 'ApplicationMediators' erstellt.

    Mit den oberen drei Commands sind die Initialisierungen des Models

    und des Views in einer bestimmten Reihenfolge vorgenommenworden. Um dies zu tun, brauchten die Commands nicht viel berModel oder View zu wissen.

  • 8/8/2019 German - PureMVC IIBP Translation

    26/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 26 of 52 5/12/2008 18:05 A5/P5

    Commands

    Inszenierung von komplexen Aktionen und die 'Business Logic'

    Falls die Inhalte des Models oder die Implementation der Viewsgendert werden, mssen die Proxies und die Mediatoren nur sowenig wie ntig verndert.

    Die 'Business Logic' in den Commands sollte isoliert von denVernderungen der angrenzenden Bereichen bleiben.

    Das Model sollte die 'Domain Logic' kapseln und die Datenintegrittin den Proxies beibehalten. Commands fhren 'transaktionale-' oder'business Logic' gegen das Model aus, kapseln die Koordination vonTransaktionen mit mehreren Proxies und verarbeiten oder meldenFehler.

    Mediators

    Eine Mediator-Klasse wird benutzt, um zwischen den Interaktionenzwischen Usern und einer oder mehreren View Components derApplikation (z.B. Flex DataGrids oder Flash MovieClips) und demRest der PureMVC Anwendung zu vermitteln.

    In einer Flash basierten Applikation beinhaltet ein Mediatortypischerweise Event Listener fr seine View Components, um aufUsergesten und Datenanfragen der Component zu reagieren. EinMediator sendet und empfngt Notifications, um mit dem Rest derApplikation zu kommunizieren.

  • 8/8/2019 German - PureMVC IIBP Translation

    27/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 27 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Zustndigkeit des konkreten Mediators

    Flash, Flex und AIR liefern eine Unzahl an hervorragenden UIComponents. Mglicherweise werden diese erweitert oder eswerden eigene Komponenten in ActionScript geschrieben, um dieendlosen Mglichkeiten fr die Darstellung von Model-Datenauszuschpfen und dem User es zu erlauben, mit diesen zuinteragieren.

    In der nicht allzu fernen Zukunft werden es weitere Plattformengeben, welche nicht auf ActionScript basieren. PureMVC ist bereitsin andere Plattformen portiert worden, inklusive fr Silverlight undJ2ME, um den Horizont fr RIA Anwendungen fr dieseTechnologien zu erweitern.

    Ein Ziel des PureMVC Frameworks ist es, neutral gegenber dereingesetzten Technologie zu sein. Dafr bietet es einfache Idiome,um beliebige UI Components oder Datenstrukturen und -servicesanzupassen.

    Eine View Component kann in einer PureMVC Applikation einebeliebige UI Component sein. Ganz unabhngig davon, vonwelchem Framework diese stammt und wieviele Subcomponents siebeinhaltet. Eine View Component sollte soviel wie mglich vonihrem Zustand und ihrer Funktionsweise kapseln und eine einfacheAPI ber Events, Methoden und Eigenschaften bieten.

    Ein konkreter Mediator hilft dabei, mit einer oder mehreren ViewComponents ber ihre APIs zu interagieren. Der Mediator hlt dafr

    lediglich die Referenzen zu den View Components.

    Die Zustndigkeit der Mediators liegt vor allem in dem Handeln aufEvents und Notifications, welche von den View Components bzw.vom Rest des System versendet werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    28/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 28 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Zustndigkeit des konkreten Mediators

    Da die Mediators oft mit Proxies interagieren, ist es blich,innerhalb des Konstruktors eine lokale Referenz zu den oftbentigten Proxies zu erstellen. Das verringert das stndigeAufrufen der 'retrieveProxy' Methode ber die Faade.

    Erforderliches Casten der View Component

    Bei der normalen Einbindung von Mediators innerhalb von PureMVCakzeptiert ein Mediator beim Aufruf seines Konstruktors zweiArgumente: Seinen Namen und ein generisches Object.

    Der Konstruktor des konkreten Mediator bergibt der Superklassedas generische Object als seine View Component, welche intern als'protected' Eigenschaft 'viewComponent' von Typ 'Object' benutztwird.

    Auch ist es mglich, dem Mediator dynamisch eine Referenz zur

    View Component zu setzen, nachdem er bereits instanziiert wurde.Dafr dient die Methode 'setViewComponent'.

    Wie auch die View Component gesetzt wird, sie sollte immer inihren Typ gecastet werden, um den Zugriff zu ihrer API sauber zuermglichen.

    ActionScript bietet ein Feature, welches 'implicit getters and setters'genannt wird. Ein 'implicit getter' sieht aus wie eine Methode, wird

    aber wie eine Eigenschaft innerhalb der Klasse oder einerApplikation behandelt. Das ist sehr hilfreich, um das hufigeCasting-Problem der View Components zu lsen.

  • 8/8/2019 German - PureMVC IIBP Translation

    29/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 29 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Erforderliches Casten der View Component

    Fr Anwendung eines konkreten Mediators ist es ein hilfreichesIdiom, einen 'implicit getter' fr das Casten der View Component inihren Typ zu verwenden und ihr damit einen aussagekrftigenNamen zu geben.

    Wie zum Beispiel beim Erstellen folgender Methode:

    protectedfunctionget controlBar() : MyAppControlBar

    {

    return viewComponent as MyAppControlBar;}Dann, irgendwo im Mediator, kann anstatt:

    MyAppControlBar ( viewComponent ).searchSelction = MyAppControlBar.NONE_SELECTED;

    dies hier getan werden:

    controlBar.searchSelction = MyAppControlBar.NONE_SELECTED;

    View Components zuhren und antworten

    Ein Mediator hat normalerweise nur eine View Component. Aber erkann auch mehrere managen, wie beispielsweise eine'ApplicationToolBar' mit den enthaltenen Buttons und anderenKomponenten. Es knnen zusammengehrige Komponenten (z.B.ein Formular) in einer einzelnen View Component als Gruppe

    zusammengefasst werden, welche den Zugriff bestimmter Elementeber Eigenschaften dem Mediator zu Verfgung stellt. Aber es istdas Beste, soviel wie mglich von der Implementierung der ViewComponente zu kapseln und die auszutauschenden Daten der ViewComponent als eigene typisierte Objekte zu Verfgung zu stellen.

  • 8/8/2019 German - PureMVC IIBP Translation

    30/52

  • 8/8/2019 German - PureMVC IIBP Translation

    31/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 31 of 52 5/12/2008 18:05 A5/P5

    Mediators

    View Components zuhren und antworten

    Einige gute Faustregeln sind:

    o Wenn eine Anzahl von anderen Mediators in dieReaktion auf einem Event eingebunden sein sollen,dann ist ein bestimmter Proxy zu aktualisieren odereine Notification zu senden, auf welche alle andereninteressierten Mediators entsprechend reagierenknnen.

    o Falls eine groe Menge an koordiniertenInteraktionen mit anderen Mediators erforderlich ist,ist es eine gute Praktik, einen Commandeinzusetzen, um die erforderlichen Schritte an einemOrt zu organisieren.

    o Es ist eine schlechte Praktik, andere Mediator direktanzusprechen, um auf diese einzuwirken. Ebensosollten keine Mediators umprogrammiert werden, um

    diese Manipulationen zu ermglichen.

    o Um den Zustand der Applikation zu manipulierenoder zu verbreiten, sind in dem Proxy, welcher denZustand hlt, die notwendigen Werte zu verndernoder die entsprechenden Methoden aufzurufen. DerProxy reagiert auf diese nderungen mit demVersenden von Notifications, auf welche alleinteressierten Mediators reagieren knnen.

  • 8/8/2019 German - PureMVC IIBP Translation

    32/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 32 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Verarbeiten von Notifications in dem konkreten Mediator

    Im Gegensatz zum explizitem Hinzufgen als Event Listener zu derView Component werden die Mediators zum PureMVC-Systemeinfach und automatisch hinzugefgt.

    Bei der Registrierung mit dem View wird der Mediator nach seinenNotifications-Interessen befragt, welche er mit einem Array vonNamen der Notifications beantwortet, auf die er reagieren mchte.

    Der einfachste Weg hierfr ist es, ber einen einzelnen Ausdruckein anonymes Array zurckzugeben, welches die Namen auf die zureagierenen Notifications enthlt, welche blicherweise als statischeKonstanten in der konkreten Faade definiert werden.

    Das Definieren der Interessen des Mediators an Notifications isteinfach:

    override publicfunction listNotificationInterests() : Array

    {

    return [ ApplicationFacade.SEARCH_FAILED,

    ApplicationFacade.SEARCH_SUCCESS

    ];

    }

    Wenn einer dieser angegebenen Notifications von irgendeinemAkteur des Systems (inklusive dem Mediator selbst) versendet wird,wird innerhalb des Mediators die Methode 'handleNotification'aufgerufen, welche die Notification als Argument bergeben wird.

    Aufgrund der Lesbarkeit und dem einfachen Refactoring beimHinzufgen oder Entfernen von Notifications, ist innerhalb der'handleNotifications' Methode ein 'switch / case' Statement einer 'if/ else' Abfrage vorzuziehen.

  • 8/8/2019 German - PureMVC IIBP Translation

    33/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 33 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Verarbeiten von Notifications in dem konkreten Mediator

    Bei der Beantwortung einer beliebigen Notifications ist immer etwaszu tun und alle dazu bentigten Informationen sollten in derNotification selbst vorhanden sein. Mitunter werden basierend aufden Informationen in der Notification weitere Informationen voneinem Proxy bentigt. Aber innerhalb des Notification-Handlerssollte keine komplizierte Logik stattfinden. Falls diese besteht ist esein Zeichen dafr, dass versucht wurde, die 'Business Logic' in denNotification-Handler, statt in einem Command zu packen.

    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;

    }

    }

    }

    Auerdem sollte eine typische 'handleNotification' Methode nichtmehr als 4 oder 5 Notifications abhandeln.

    Eine grere Anzahl von Notifications ist ein Zeichen dafr, dass dieZustndigkeit des Mediators in mehrere Mediators aufgeteilt werden

    sollte. Statt fr alle Subcomponents nur einen gigantischenMediator zu verwenden, sollten dann fr die Subcomponents eigeneMediators erstellt werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    34/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 34 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Verarbeiten von Notifications in dem konkreten Mediator

    Das Benutzen von einer vorher festgelegten Notification ist dergroe Unterschied, wie Mediators auf Events und wie aufNotifications hren.

    Bei Events werden mehrere Handler-Methoden bentigt.Normalerweise eine fr jedes Event, auf welches der Mediatorreagieren will. Generell versenden dann diese Methoden nurNotifications. Sie sollten nicht zu kompliziert sein, auch sollten diesenicht zu zu tief in die Details der View Components eingreifen.Deshalb sollten die View Components so geschrieben sein, dass siedie Details ihrer Implementation kapseln und dem Mediator eineAPI zu Verfgung stellen.

    Bei Notifications ist nur eine einzige Handler-Methode notwendig,welche die Notifications abarbeitet, an denen der Mediatorinteressiert ist.

    Es ist das Beste, direkt in der 'handleNotification' Methode auf die

    Notifications zu reagieren. Mit Hilfe eines 'switch / case' Statementwerden die Notifications in ihren Namen unterschieden.

    Es gab bisher eine groe Debatte um die Verwendung von 'switch /case' Statements. Viele Entwickler erwgen diese wenigereinzusetzen, weil alle Flle innerhalb dergleichen Methodeausgefhrt werden. Wie auch immer, die einzige Notification-Methode und der 'switch / case' Stil wurden dafr verwendet, umdie Dinge einzugrenzen, welche innerhalb des Mediators passieren.

    Und es gilt als das empfohlene Konstrukt.

    Der Mediator hat die Aufgabe, zwischen der View Component unddem Rest des Stystem zu vermitteln.

  • 8/8/2019 German - PureMVC IIBP Translation

    35/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 35 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Verarbeiten von Notifications in dem konkreten Mediator

    Denken Sie an die Rolle eines bersetzers, welcher bei Gesprchenzwischen seinem Botschafter und dem Rest der Mitglieder einer UN-Konferenz vermittelt. Der bersetzer sollte selten mehr tun, alseinfach zu bersetzen, Mitteilungen weiterleiten und ggf. eineangemessene Metapher verwenden. Das gleiche trifft fr den Rolledes Mediators innerhalb von PureMVC zu.

    Verbindung von Mediators zu Proxies und anderen Mediators

    Da eigentlich der View mit der Darstellung der Model-Daten in einergraphischen und interaktiven Weise beauftragt ist, wird eine enge'one-way' Verbindung zu den Proxies erwartet. Der View muss dasModel kennen, aber das Model braucht nichts ber einen beliebigenAspekt des Views zu wissen.

    Mediatoren knnen ungehindert auf Proxies des Models zugreifen,das Data Object ber eine API lesen oder manipulieren, welche vondem Proxies ausgestellt wird.

    In der gleichen Art und Weise knnen Mediators Referenzen zuanderen Mediators des Views aufrufen. Der aufgerufene Mediatorbietet Mglichkeiten, um gelesen oder manipuliert zu werden.

    Allerdings ist das keine gute Praktik. Denn es erhht dieAbhngigkeiten zwischen den Teilen des Views, welche sich negativauf die Fhigkeiten eines Refactoring von einem Teil des Views

    auswirken, ohne andere mit zu beinflussen.

    Ein Mediator, welcher mit anderen Teilen des Views kommunizierenmchte, sollte eine Notification senden, anstatt andere Mediatorendirekt abzufragen oder zu manipulieren.

  • 8/8/2019 German - PureMVC IIBP Translation

    36/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 36 of 52 5/12/2008 18:05 A5/P5

    Mediators

    Verbindung von Mediators zu Proxies und anderen Mediators

    Mediators sollten keine Methoden fr die Manipulation ihrerzugeordneten View Component(s) bieten und stattdessen nur aufNotifications reagieren, um solche Dinge umzusetzen.

    Wenn interne Dinge einer View Component in groem Maeinnerhalb eines Mediators manipuliert werden, sollte dies gendertwerden. Diese Arbeit sollte in eine Methode der View Componentverlegt werden, um die Implementation der View Component soweit wie mglich zu kapseln und somit eine grereWiederverwendung zu gewhrleisten.

    Falls Daten der Proxies in groem Mae innerhalb eines Mediatorsmanipuliert werden, sollte dies gendert werden. Dazu wird dieseArbeit in einen Command verlegt und dadurch der Mediatorvereinfacht. Mit dem Halten der 'Business Logic' in Commandsknnen zudem andere Teile des Views diese wiederverwenden.Auerdem werden die Verbindungen von View und Model in einemgrten mglichen Mae gelst.

    User Interaktion mit View Components und Mediators

    Stellen Sie sich eine 'LoginPanel' Komponente vor, welche einFormular beinhaltet. Dafr gibt es einen 'LoginPanelMediator',welcher es dem User erlaubt, seine Daten ber das 'LoginPanel' zukommunizieren und diese die Interaktion mit dem Beginn desLoginprozesses beantwortet.

    Die Zusammenarbeit zwischen der 'LoginPanel' Komponente unddem 'LoginPanelMediator' erfolgt ber das Versenden einesTRY_LOGIN Events vom 'LoginPanel', sobald der User seine Datenangegeben hat und versucht, sich einzuloggen. Der

  • 8/8/2019 German - PureMVC IIBP Translation

    37/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 37 of 52 5/12/2008 18:05 A5/P5

    Mediators

    User Interaktion mit View Components und Mediators

    'LoginPanelMediator' verarbeitet diesen Event mit dem Versendeneiner Notification. Diese Notification trgt als 'body' ein 'LoginVO',welches von der 'LoginPanel' Komponente gefllt wurde.

    LoginPanel.mxml:

    the constant name here, because MetaData is a compiler directive

    -->

    [Event('tryLogin')];

    import com.me.myapp.model.vo.LoginVO;

    // The form fields bind bidirectionally to this objects props

    [Bindable] public varloginVO:LoginVO = new LoginVO();[Bindable] public varloginStatus:String = NOT_LOGGED_IN;

    // Define a constant on the view component for event names

    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 German - PureMVC IIBP Translation

    38/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 38 of 52 5/12/2008 18:05 A5/P5

    Mediators

    User Interaktion mit View Components und Mediators

  • 8/8/2019 German - PureMVC IIBP Translation

    39/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 39 of 52 5/12/2008 18:05 A5/P5

    Mediators

    User Interaktion mit View Components und Mediators

    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;

    // A Mediator for interacting with the LoginPanel component.

    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 );

    }

    // List Notification Interests

    override publicfunction listNotificationInterests( ) : Array

    {return [

    LoginProxy.LOGIN_FAILED,

    LoginProxy.LOGIN_SUCCESS

    ];

    }

    // Handle 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;

    case LoginProxy.LOGIN_SUCCESS:

    loginPanel.loginStatus = LoginPanel.LOGGED_IN;

    break;

    }

    }

  • 8/8/2019 German - PureMVC IIBP Translation

    40/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 40 of 52 5/12/2008 18:05 A5/P5

    Mediators

    User Interaktion mit View Components und Mediators

    // User clicked Login Button; try to log in

    privatefunction onTryLogin ( event:Event ) : void {

    sendNotification( ApplicationFacade.LOGIN, loginPanel.loginVO );

    }

    // Cast the viewComponent to its actual type.

    protectedfunctionget loginPanel() : LoginPanel {

    return viewComponent as LoginPanel;

    }

    }

    }

    Beachten Sie, dass der 'LoginPanelMediator' einen Event Listenerzum 'LoginPanel' innerhalb seines Konstruktors platziert, um die'onTryLogin' Methode auszufhren, sobald der User den 'Login'Button geklickt hat. Innerhalb der 'onTryLogin' Methode wird dieLOGIN Notification mit der vom User gefllten 'LoginVO' versendet.

    Zuvor wurde der 'LoginCommand' mit der entsprechendenNotification registriert. Dieser Command ruft die 'login' Methodevom 'LoginProxy' auf und bergibt dabei das 'LoginVO'. Der'LoginProxy' fhrt das Login mit einem Remote-Service aus undsendet daraufhin eine LOGIN_SUCCESS oder LOGIN_FAILEDNotification. Diese Klassen sind am Ende der Kapitels 'Proxies'definiert.

    Der 'LoginPanelMediator' hat die LOGIN_SUCCESS undLOGIN_FAILED Notification als seine Notification Interessen gelistetund wird benachrichtigt, wann auch immer diese versendet werden.Mit Empfang setzt er den 'loginStatus' vom 'LoginPanel' bei Erfolgauf LOGGED_IN und bei Misserfolg auf NOT_LOGGED_IN. Das'LoginVO' wird geleert.

  • 8/8/2019 German - PureMVC IIBP Translation

    41/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 41 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Verallgemeinert gesagt wird das Proxy Muster dazu benutzt, um einenPlatzhalter fr ein Object zu bieten, auf welches kontrolliert zugegriffenwerden kann. In einer PureMVC basierten Anwendung wird eine ProxyKlasse speziell dafr genutzt, um einen Teil des Daten-Model derApplikation zu managen.

    Ein Proxy kann den Zugang zu lokal erstellten Datenstrukturen inbeliebiger Komplexitt managen. Das ist das Data Object des Proxys.

    In diesem Fall beinhalten die Idiome fr die Interaktion mit einem

    Proxy vermutlich das synchrone Setzen und Abfragen seiner Daten.Dafr stellt ein Proxy alle Eigenschaften und Methoden seines DataObjects oder einer Referenz zu diesem zur Verfgung. Wenn Methodenzum Aktualisieren der Daten ausgefhrt werden, kann ein Proxy eineNotification senden, um dem Rest des Systems diese nderungmitzuteilen.

    Ein Remote Proxy kann benutzt werden, um Interaktionen ber einenRemote Service fr das Abrufen und Speichern von Teilen der Daten

    zu kapseln. Der Proxy kann ein Objekt, das mit dem Remote Servicekommuniziert, und den Zugriff der Daten, welche ber den Servicegesendet und empfangen werden, verwalten.

    In solch einem Fall kann beim ndern der Daten oder beim Aufrufeiner Methode des Proxys eine asynchrone Notification erwartetwerden. Diese Notification werden vom Proxy versendet, sobald derService die Daten vom Remote Endpunkt erhlt.

  • 8/8/2019 German - PureMVC IIBP Translation

    42/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 42 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Zustndigkeit des konkreten Proxy

    Der konkrete Proxy ermglicht es, einen Teil der Model-Daten zukapseln, wo auch immer dieser herkommen und was auch immersein Typ sein mag. Der Proxy verwaltet das Data Object und seinenZugang durch die Applikation.

    Die Implementation der Proxy Klasse innerhalb von PureMVC isteine einfaches Object mit Daten, welches beim Model registriertwerden kann.

    Um es allerdings komplett nutzbar zu machen, muss es eineUnterklasse vom Proxy sein und einige fr den konkreten Proxynotwendige Funktionalitten besitzen.

    Gebruchliche Varianten des Proxy Musters beinhalten:

    o Remote Proxy: Ein konkreter Proxy, der serverseitigeDaten verwaltet. Auf diese Daten wird berirgendeine Art von Service zugegriffen.

    o Proxy und Delegate: Mehrere Proxies bentigen denZugriff auf das gleiche Service Object. Die DelegateKlasse verwaltet dieses Service Object undkontrolliert den Zugriff sowie die Weiterleitung derErgebnisse an die Anforderer.

    o Protection Proxy: Wird benutzt, falls ein Objektverschiedene Zugriffsrechte bentigt.

    o Virtual Proxy: Erstellt bei Bedarf ein 'teueres' Objekt

  • 8/8/2019 German - PureMVC IIBP Translation

    43/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 43 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Zustndigkeit des konkreten Proxy

    o Smart Proxy: Ldt beim ersten Zugriff das DataObject in den Speicher. Fhrt Zhlungen vonReferenzen durch. Erlaubt das Sperren einesObjects, damit keine anderen Objekte es ndernkann.

    Erforderliches Casten des Data Object

    Bei der normalen Einbindung von Proxies innerhalb von PureMVCakzeptiert ein Proxy beim Aufruf seines Konstruktors zweiArgumente: Seinen Namen und ein generisches Object. Das DataObject kann nach der Initialisierung des Proxies ber die Methode'setData' dynamisch gesetzt werden

    Wie bei dem Mediator und seiner View Component muss auchdieses Objekt regelmig in seinen Typ gecastet werden, um denZugriff auf die Eigenschaften und Methoden zu ermglichen, die esoffenlegt. Im gnstigsten Fall ist es nur eine lstige und mhsehligePraktik, jedoch fhrt es mglicherweise zu Idiome, welche mehr alsntig von der Implementation des Data Objects offenlegen.

    Weil Data Objects oft auch komplexe Strukturen besitzen, werdenzu den verschiedenen Teilen dieser Strukturen einfache Referenzenbentigt, welche wiederum typsicher sein sollten.

    Wie bereits erwhnt, bietet ActionScript ein Feature namens 'getter

    and setter'. Damit kann sehr hilfreich das Problem des mehrmaligenCasten und des unzulssigen Wissens ber die Implementation desData Objects gelst werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    44/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 44 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Erforderliches Casten des Data Object

    Ein hilfreiches Idiom beim Einsatz des konkreten Proxy ist ein'implicit getter', welcher das Data Object in seinen eigentlichen Typcastet und ihm einen aussagekrftigen Namen gibt.

    Auerdem knnen ber mehrere, unterschiedliche Typen von'getters' spezielle Teile des Data Objects abgefragt werden.

    Zum Beispiel:

    publicfunctionget searchResultAC () : ArrayCollection

    {

    return data as ArrayCollection;

    }publicfunctionget resultEntry( index:int ) : SearchResultVO

    {

    return searchResultAC.getItemAt( index ) as SearchResultVO;

    }Statt irgendwo in einem Mediator das folgende zu tun,

    var item:SearchResultVO =

    ArrayCollection ( searchProxy.getData() ).lastResult.getItemAt( 1 ) as SearchResultVO;

    kann dieses getan werden:

    var item:SearchResultVO = searchProxy.resultEntry( 1 );

    Vermeidung von engen Verbinden zu Mediators

    Der Proxy wird nicht wie ein Mediator nach seinen Interessen andNotifications abgefragt, auch wird er beim Versenden vonNotifications nie benachrichtigt. Denn er sollte nicht mit dem

  • 8/8/2019 German - PureMVC IIBP Translation

    45/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 45 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Vermeidung von engen Verbinden zu Mediators

    Zustand des Views befasst sein. Stattdessen bietet der ProxyMethoden und Eigenschaften an, um andere Akteure die Mglichkeitzu bieten, ihn zu manipulieren.

    Der konkrete Proxy sollte nicht auf Mediatoren zugreifen und dieseauch nicht manipulieren, um das System ber nderungen seinesData Objects zu informieren.

    Er sollte stattdessen Notifications senden, welche durch Commandsoder Mediators beantwortet werden. Wie das System auf dieseNotifications reagiert, sollte keine Konsequenzen fr den Proxyhaben.

    Mit dem Freihalten der Model-Ebene von Wissen ber dieImplementation des Systems, knnen die Bereiche des Views undControllers oft gendert werden, ohne den Bereich des Models inMitleidenschaft zu ziehen.

    Bei der Gegenseite sieht es nicht ganz so aus. Es ist schwierig denBereich des Models zu ndern, ohne View- und mgliche Controller-Bereiche in Mitleidenschaft zu ziehen. Schlielich existieren dieseBereiche dafr, den User mit dem Model interagieren zu lassen.

    Kapseln der 'Domain Logic' in Proxies

    Eine nderung auf Model-Ebene hat meistens auch ein Refactoring

    der View- und Controller-Bereiche zu Folge.

    Die Trennung zwischen den Interessen des Models und denkombinierten Interessen von View und Controller kann durch einePlatzierung der 'Domain Logic' in den Proxies erhht werden.

  • 8/8/2019 German - PureMVC IIBP Translation

    46/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrleistungen der Eignung zur Gebrauchstauglichkeit oder die Garantie der Nichtverletzung.

    Page 46 of 52 5/12/2008 18:05 A5/P5

    Proxies

    Kapseln der 'Domain Logic' in Proxies

    Der Proxy kann nicht nur dazu benutzt werden, um auf Datenzuzugreifen, sondern auch fr die Sicherstellung der Daten in einemvaliden Zustand.

    So sollte zum Beispiel die Berechnung einer Umsatzsteuer in einer'Domain Logic' Funktion erfolgen, welche sich im Proxy befindet,nicht aber in einem Mediator oder Command.

    Obgleich dies auch in irgendeinem anderen Platz passieren knnte,ist das Platzieren in einem Proxy nicht nur logisch, sondern es lsstauch die anderen Bereiche leichter und einfacher ndern.

    Ein Mediator kann den Proxy und somit die Umsatzsteuer-Funktionaufrufen und einige Formular-Werte bergeben. Aber einePlatzierung dieser Berechung in den Mediator wrde die beinhaltete'Domain Logic' in den Bereich des Views verschieben. DieBerechung der Umsatzsteuer ist ein typischer Fall fr das 'DomainModel'. Der View erkennt es als eine Eigenschaft des 'Domain

    Models', welche abrufbar ist, sobald die entsprechenden Eingabenvorhanden sind.

    Stellen Sie sich vor, Ihre Applikation, an der Sie gerade arbeiten, isteine Rich Internet Anwendung, welche im Browser unter Desktop-Auflsungen zum Einsatz kommt. Nun soll eine neue Version frden Einsatz unter PDA-Auflsungen ausgeliefert werden, miteingeschrnkten Features, aber immer noch mit den gleichenAnforderungen an den Model-Bereich.

    Mit der richtigen Trennung von Interessen ist es mglich, denBereich des Models in seiner Ganzheit wieder zu verwenden undneue View und Controller an diesen einfach zu binden.

  • 8/8/2019 German - PureMVC IIBP Translation

    47/52

    PureMVC ist ein freies, Open Source Framework. Erstellt und gefhrt von Futurescale, Inc. Copyright 2006-08. Einige Rechte vorbehalten. Wiederverwendung steht unter

    der Creative Commons 3.0 Attribution US Lizenz. PureMVC sowie diese Dokumentation und jegliches Schulungs- oder Demonstrationsmaterial, welche ber die

    Futurescales Webseite erhltlich sind, werden ohne jegliche Gewhrleistung, auch nicht ausdrcklich oder stillschweigend, zu Verfgung gestellt. Ohne es einzuschrnken

    zhlen dazu die Gewhrlei


Recommended