Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Robotlegs – Ein Blick unter die Haube – Teil 2

Im ers­ten Teil der Blogreihe bin ich bereits auf das Robotlegs Framework sowie die Verwendung der Kontext – Klasse ein­ge­gan­gen. Dieser Blogpost beleuch­tet die Funktion der Mediatoren und deren View-Komponenten.

Ein Mediator gehört immer zu genau einer View-Komponente. Er stellt die Steuereinheit für die Komponente dar, indem er auf Events oder in mei­nem Fall, aus­ge­sen­dete Signale der Komponente hört und wei­ter­füh­rende Schritte ein­lei­tet. Dabei kön­nen wei­tere Informationen über den Zustand der Komponente gesam­melt wer­den um dar­aus  Berechnungen vor­zu­neh­men oder Signale zu "Dispatchen". Die im Signal ent­hal­te­nen Daten kön­nen so von wei­te­ren Aktoren der Anwendung ver­wen­det wer­den. Mediatoren kön­nen nicht nur auf Events oder Signale der View-Komponente hören, sie kön­nen auch auf Events reagie­ren, wel­che von ande­ren Teilen der Anwendung aus­ge­löst wur­den um so bei­spiels­weise Manipulationen an der View vorzunehmen.

Um nicht den Überblick über Mediatoren, Views (Komponenten) sowie Skins zu ver­lie­ren, emp­fiehlt sich fol­gende Struktur.

Eine Beispielhafte View Implementierung könnte fol­gen­der­ma­ßen aussehen:

<MyView>
<fx:Script>
<![CDATA[ 
private function doSomething():void{
  mySignal.dispatch(data);    
}    
]]>
</fx:Script>
<s:Button id="doSomething" 
label="click"
click="doSomething(event)"/>
</MyView>

Die View-Komponente ist rela­tiv "unspek­ta­ku­lär". Sie ent­hält einen Button sowie einen Button-Handler, wel­cher ledig­lich ein Signal aus­löst. Anders der dazu­ge­hö­rige Mediator:

public class ViewMediator extends Mediator
{
[Inject]
public var view:MyView;

[Inject]
public var signal:Signal;

override public function onRegister():void{
view.mySignal.add(handleSignal);
}

protected function handleSignal():void{        
doSomeWorkWithData();
signal.dispatch(data);
}
}

Dieser ent­hält einige wich­tige Punkte. Wichtig ist zum einen, dass der Mediator von der Klasse Mediator abge­lei­tet wer­den muss. Zum ande­ren wird sich am [Inject] Tag bedient.

[Inject] 
public var view:MyView;

Durch das [Inject] Tag wird dem Framework mit­ge­teilt, die View zur Injektion bereit­zu­stel­len. Wird eine Instanz der Mediator-Klasse
erstellt steht die dazu­ge­hö­rige View anschlie­ßend auto­ma­tisch zur Verfügung.

Die onRegister() Methode muss in jedem Mediator über­schrie­ben wer­den. Sie wird auf­ge­ru­fen nach­dem die Injektion abge­schlos­sen ist und die View bereit steht. Innerhalb die­ser Methode kön­nen nun Signale der View abon­niert wer­den.  Dies geschieht durch die add Methode des Signals .

view.mySignal.add(handler...)

Damit ist die Bereitstellung der View und des Mediators abge­schlos­sen. Der Mediator ist zu die­sem Zeitpunkt noch nicht fähig seine View zu über­wa­chen. Um dies zu gewähr­leis­ten muss der Mediatormap, in der Kontextklasse, das Paar noch bekannt gemacht werden.

mediatorMap.mapView(MyView,ViewMediator);

Damit ist die Konfiguration für View und Mediator abgeschlossen.

Im nächs­ten und letz­ten Beitrag über Robotlegs geht es um Models, Services und Commands.

Related Posts

Pin It on Pinterest