Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-03-2011, 19:15   #1 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
RobotLegs Initialisierungsprozess

Hi,

ich habe gerade angefangen ein Projekt auf Basis von RobotLegs zu implementieren und eine Frage zum Initialisierungsprozess meiner Anwendung.

Nachdem ich den Kontext erzeugt habe instanziiere ich eine View namens Root.
Der dazugehörige Mediator dispatched ein Event der auf ein Command gemapped wird welcher den initialen state des Models setzt.

Zum Beispiel werden Daten zu Listen hinzugefügt und das Model dispatched für jeden Datensatz ein entsprechendes Event.

Das Event wird dann von der View über einen oder mehrere Mediator abgefangen und die View entsprechend aktualisiert.

Das Problem ist nun, dass ich nicht so recht weiss wann welcher Mediator über das Framework initialisiert wird und das Model teilweise schon lange initialisiert ist bevor die entsprechenden Mediator zur Verfügung stehen.

Zwar kann ich im Mediator dann einmal über den Datensatz des Models iterieren und zusätzlich Listener für die Modelevents implementieren aber lieber wäre es mir, mir das initiale iterieren zu sparen und nur die Events zu nutzen.
Dafür müsste ich aber sicher sein, dass alle nötigen Mediator schon registriert worden sind.
__________________
http://blog.johannes-hodde.com
JoH ist offline   Mit Zitat antworten
Alt 25-03-2011, 05:42   #2 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
Zitat:
Zitat von JoH Beitrag anzeigen
Hi,
...
Nachdem ich den Kontext erzeugt habe instanziiere ich eine View namens Root.
Der dazugehörige Mediator dispatched ein Event der auf ein Command gemapped wird welcher den initialen state des Models setzt.
Wieso im Mediator verstecken? Du kannst auch im Hauptkontext nach der Initialisierungsphase von allem ein Event "System Init" schmeissen. Dann liest sich der Startprozess besser (anstatt das man in irgendeinem Mediatoren nach dem Startschuss suchen muss)
Zitat:
Zum Beispiel werden Daten zu Listen hinzugefügt und das Model dispatched für jeden Datensatz ein entsprechendes Event.
Sofort bei Initialisierung?
Zitat:
...
Das Problem ist nun, dass ich nicht so recht weiss wann welcher Mediator über das Framework initialisiert wird und das Model teilweise schon lange initialisiert ist bevor die entsprechenden Mediator zur Verfügung stehen.
Damit hast Du die richtigen Schritte bereits beschrieben. Dann sorge doch dafür, dass die Mediatoren zur Verfügung stehen. Ablauf: Load Model, Initialisierung UI (und damit die Mediatoren), Initialisierung Model (welches erstmals die Events schmeißt, auf die die Mediatoren reagieren)
Zitat:
Zwar kann ich im Mediator dann einmal über den Datensatz des Models iterieren und zusätzlich Listener für die Modelevents implementieren aber lieber wäre es mir, mir das initiale iterieren zu sparen und nur die Events zu nutzen.
Dafür müsste ich aber sicher sein, dass alle nötigen Mediator schon registriert worden sind.
Dann registrier sie Was meinst Du damit, dass Du Dir das initiale Iterieren sparen willst? Wie fein granuliert Du Daten aus deinem Model rausschickst, damit ein korrespondierender Mediator möglichst wenig Arbeit hat diese Daten für die View aufzubereiten ist eine Frage, die es abzuwägen gilt. Es spricht doch nichts dagegen, dass ein Mediator kurz über eine Liste von Datensätzen läuft und mit den Inhalten speziell seine View befüttert. Ich glaube, Du musst das mal genauer erklären.
malthoff ist offline   Mit Zitat antworten
Alt 25-03-2011, 09:41   #3 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Hier ein Model:

PHP-Code:
public interface ISomeModel {
    function 
addSomeData(data Data) : void;
    function 
get iterator() : IIterator;
}

public function 
SomeModel extends Actor implements ISomeModel {
    public function 
addSomeData(data Data) : void {
        
_list.add(data);
        
dispatch(new SomeModelEvent(SomeModelEvent.DATA_ADDdata);
    }

und die View

PHP-Code:
public class SomeListView extends Sprite {
    public function 
addSomeData(data Data) : void {//render}
}

public class 
SomeListMediator extends Mediator {
    [
Inject]
    public var 
model ISomeModel;

    [
Inject]
    public var 
view SomeListView;

    
override public function onRegister() : void {
        var 
iterator IIterator model.iterator;
        while(
iterator.hasNext()) {
            
view.addSomeData(iterator.next);
        }

        
eventMap.mapListener(eventDispatcherSomeModelEvent.DATA_ADDonDataAdd);
    }

    private function 
onDataAdd(event SomeModelEvent) : void {
        
view.addSomeData(event.data);
    } 
Hier möchte ich mir im Mediator das iterieren sparen und nur mit den Events arbeiten.
Nachdem der Context initialisiert ist, wird der View generiert und auf die Bühne gesetzt.
Danach wird der StartUpEvent dispatched und eigentlich sollte ja an der Stelle der Mediator bereits initialisiert sein, sich für das ModelEvent registriert haben und dementsprechend mitkriegen wenn Daten hinzugefügt werden.
Dem ist aber leider nicht so weil der Mediator offenbar so verspätet registriert wird, dass das Model bereits initialisiert ist.
__________________
http://blog.johannes-hodde.com
JoH ist offline   Mit Zitat antworten
Alt 26-03-2011, 14:41   #4 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
Zitat:
Zitat von JoH Beitrag anzeigen
Danach wird der StartUpEvent dispatched und eigentlich sollte ja an der Stelle der Mediator bereits initialisiert sein, sich für das ModelEvent registriert haben und dementsprechend mitkriegen wenn Daten hinzugefügt werden.
Das hört sich schon komisch an. "..sollte sich für das Modelevent registriert haben". Zeig doch mal deinen Context Initialisierungsprozess, in dem DU den Mediator der Mediatormap hinzufügst und ihn auf kommende Model Events "vorbereitest", indem Du dem eventdispatcher einen Listener hinzufügst. Trace doch mal an den entscheidenden Stellen etwas aus, damit du siehst, was in welcher Reihenfolge passiert. Wird das Event vom Modul vor oder nach der onRegister Methode vom Mediator geschmissen?

Und warum du das Iterieren sparen möchtest und NUR mit Events arbeiten willst, erkläre auch bitte genauer.

Geändert von malthoff (26-03-2011 um 14:47 Uhr)
malthoff ist offline   Mit Zitat antworten
Alt 30-03-2011, 21:46   #5 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Hey,

sorry für die späte Antwort.
leider habe ich den code gerade nicht zur Hand aber im Prinzip ist es wie ich es bereits beschrieben habe.

Im Context wird ViewX auf MediatorX gemapped und am Ende der StartUpEvent dispatched welcher auf StartUpCommand gemapped ist.

MediatorX registriert sich bei Instanziierung als Listener bei ModelX.

Das Log bestätigt, dass, obwohl das Model erst nach der Erzeugung des View initialisiert wird, der Mediator zu spät erzeugt wird.

1. Context wird erzeugt
2. addChild(new ViewX) - ViewX wurde vorher auf MediatorX gemapped
3. StartUpEvent wird dispatched
4. Model wird initialisiert
5. Mediator kommt zu spät, Model ist bereits initialisiert.
__________________
http://blog.johannes-hodde.com
JoH ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Walking On Robotlegs (Till Schneidereit) marc FFK11 0 02-03-2011 16:48


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele