Mate Flex Framework

Das Mate Framework ist ein MXML-basiertes Framework für Flex. Da ich in letzter Zeit öfters darüber gelesen habe, wurde es Zeit, es einmal selbst auszuprobieren. Die vorbildliche Dokumentation erleichtert den Einstieg sehr.

Mate framework has been created to make it easy to handle the events your Flex application creates. Mate allows you to define who is handling those events, whether data needs to be retrieved from the server, or other events need to be triggered.

Model View Controller

Mate unterstützt bei der Programmierung von Anwendungen, die nach dem Model View Controller (MVC) aufgebaut sind. Es setzt dabei auf die Flex-eigenen Events auf und hat als zentrales Element eine sogenannte „Event Map”. Die Event Map ist eine MXML-Datei, die eine Sammlung an Event Handlers enthält, die entsprechende Reaktionen auf bestimmte Events einleitet.

Dependency Injection

Die Daten (Model) werden nicht per Databinding an die View gebunden, sondern mit einem Verfahren namens dependency injection quasi automatisch hineinkopiert.

Mate also implements the idea of dependency injection—sometimes referred to as the Hollywood principle, or "don't call us, we'll call you." Objects are constructed in such a way that the data they require is provided to them or injected into the class. In other words, the classes don't call out to get data ("don't call us") but rather are passed the data they need ("we'll call you").

Beispielprogramm

Die simple Demonstrationsanwendung hat zwei Eingabefelder für Zahlen. Der Button "Addieren" rechnet die Zahlen zusammen, "Subtrahieren" zieht die Zahlen voneinander ab. Der Button "Zahlen aus XML-Datei addieren" lädt eine XML-Datei und addiert die darin hinterlegten Werte.

Für das Mate Framework Demo benötigen Sie den Flash Player

Am Beispiel des "Addieren"-Buttons wird im Folgenden geschildert, was innerhalb der Anwendung passiert.

Zusammengefasst sieht dies so aus: Ein Event wird in der View ausgelöst. Dieses wird von der Event Map verarbeitet und die Methode einer Klasse aufgerufen. Die Methode berechnet das Ergebnis, woraufhin die Event Map das Resultat entgegennimmt und wieder in die View zurückspielt.

Auslösen von Events in der View

Nach dem Klick auf den Button "Addieren" wird die Funktion getAddResult() in der View aufgerufen, die lediglich ein neues Event vom Typ MathEvent auslöst. Als Event-Typ wird MathEvent.ADD festgelegt. Die beiden Eigenschaften des Event werden mit den Zahlen aus den Input-Feldern befüllt.

Actionscript:
  1. private function getAddResult() : void {
  2.     var mathEvent:MathEvent = new MathEvent(MathEvent.ADD);
  3.     mathEvent.myNumber1 = Number (numberInput1.text);
  4.     mathEvent.myNumber2 = Number (numberInput2.text);
  5.     dispatchEvent(mathEvent);               
  6. }

Event Handlers in der Event Map

Zentrales Element ist die Event Map. Sie nimmt die ankommenden Events in Empfang und veranlasst die gewünschte Funktionalität (z.B. das Aufrufen von Methoden, Auslösen von anderen Events, Starten eines HTTPServices, etc.). Im konkreten Fall wird über MethodInvoker die Methode addNumbers aus der Klasse MathManager gestartet. Als Argumente werden die beiden Zahlen aus dem Event übergeben.

XML:
  1. <EventHandlers type="{MathEvent.ADD}" debug="false">       
  2.     <MethodInvoker generator="{MathManager}" method="addNumbers" arguments="{[event.myNumber1,event.myNumber2]}"/>   
  3. </EventHandlers>

MathManager

Die aufgerufen Funktion berechnet das Ergebnis und speichert es in der Variablen currentMathResult. (Es muss kein return-Befehl erfolgen, wie man vielleicht erwarten würde).

Actionscript:
  1. [Bindable]
  2. public var currentMathResult:Number = 0;
  3.        
  4. public function addNumbers(n1:Number, n2:Number):void {
  5.     currentMathResult = n1 + n2;
  6. }

Injectors in der Event Map

Die oben berechnete Variable currentMathResult aus der Klasse MathManager wird nun in die View "injiziert". Ziel soll die dortige Variable mathResult sein. Ergebnis dieses Schrittes ist, dass das addierte Resultat vom Nutzer zu sehen ist.

XML:
  1. <Injectors target="{DemoPanel}">
  2.     <PropertyInjector targetKey="mathResult" source="{MathManager}" sourceKey="currentMathResult" />       
  3. </Injectors>

Download

Das komplette Beispiel steht als FlashDevelop-Projekt zum Download (.zip).

Link: Mate Framework
Link: A beginner's guide to the Mate framework for Adobe Flex
Link: Choosing a Flex Framework
Link: The Mate framework from a Cairngorm perspective