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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-02-2011, 14:39   #1 (permalink)
Neuer User
 
Benutzerbild von flash_newbie
 
Registriert seit: Feb 2007
Beiträge: 215
MVC händisch, Frage zur Logik

Hi,
ich bin gerade mehr oder weniger mit
O'Reilly AS3 Design Patterns durch. Dort drinnen gibt es einige Beispiele zu MVC, an deren ich mich orientiere.

Da ich zur Zeit an einem Quiz bin, möchte ich das ganze halbwegs mit MVC umsetzen, weil ich sonst im Spaghetti-Code versinke.

Das Model wird aus einer XML erzeugt und hält hauptäschlich ein Array, das mit Instanzen einer Fragenklasse bestückt ist (xml laden, schleife -> instanzieren der Fragenklasse, zuweisen der werte aus xml). Bei 20 Fragen hat das model also ein array, welches 20 Elemente besitzt. In der Fragenklasse wird u.a. die Frage und 4 mögliche Antworten gespeichert).

So weit so gut. Nun geht es ja an die graphische Umsetzung. Im Prinzip würde ich mich schon mal darüber freuen, wenn ich hierbei Klarheit bekomme:
Es gibt bereits eine View-Klasse, die eine Weiter und Zurück-Button erstellt.
Die Weiter Taste soll nicht bei der letzten, die Zurück-Button nicht bei der ersten Frage eingeblendet werden.

Meine Frage:
Wo sage ich, welcher Button wann eingeblendet wird? im...
View (Abfragen der aktuellen Position im Array aus Model und danach entscheiden)
Controller (der kennt ja den View nicht, ist also schwierig)
Model (irgendwie hier speichern was sichtbar? oder events abfeuern, wenn erste/letzte Frage erreicht, auf die dann der view hört?)

vielen Dank

Nachtrag:
Also ich habe das nun erstmal im View mit Abfragen an das Model gelöst. Wofür ich den Controller überhaupt gebrauchen kann, ist mir noch zweifelhaft.
Im Moment nutze ich ihn nur zum Durchschleifen von Usereingaben. Bei dem O'Reilly Beispiel wurde der Controller eigentlich nur einmal halbwegs sinnvoll verwendet, als man die Benutzereingabe bei einem Rennspiel verändert hat:

PHP-Code:
public function keyPressHandler(event:KeyboardEvent):void
{
switch (
event.keyCode)
{
case 
Keyboard.LEFT :
model.addToRotationAngle(-8);
break;
case 
Keyboard.RIGHT :
model.addToRotationAngle(8);
break;}

Mir ist klar, dass es mehrere Auslegungen von MVC gibt. Bei mir war es nun so, dass ich zumind. eine einfache Logik für meine Anwendung brauche, die wohl schon sehr nah an ein MVC-System rankommen könnte.
Falls jmd noch gute Literatur (außer O'Reilly) mit Praxisbezug für AS3 weiß, würde ich mich freuen (dann für das nächste Projekt). PureMVC ist glaub ich schon wieder so ein Klassenmonster, dass es für das Grundverständnis vielleicht zu undurchsichtig ist, oder?

Geändert von flash_newbie (09-02-2011 um 15:24 Uhr)
flash_newbie ist offline   Mit Zitat antworten
Alt 09-02-2011, 21:52   #2 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Hi,

ich hätte dein Problem so gelöst, dass das Model neben einer Liste von Fragen noch eine Referenz auf die aktuelle Frage hat.
Sobald über den Controller die Referenz auf die aktuelle Frage gesetzt wird dispatched das Model die Zustandsänderung und deine entsprechende View liest im Model ob es sich um die erste oder letzte Frage handelt und updatet sich entsprechend.

Noch kurz was zum Controller.
Damit Du neben dem Datenmodell auch die Applikationslogik von der View trennst hast Du die Controller-Schicht dazwischen.

Stell Dir vor du hast eine simple View die einen Button repräsentiert.
Jetzt willst Du ein und denselben Button in verschiedenen Kontexten verwenden.

Code:
public class Button extends Sprite {
    private var _controller : IController;

    public function Button(controller : IController) {
        _controller = controller;
        addEventListener(MouseEvent.CLICK, onClick);
    }

    private function onClick(event : MouseEvent) : void {
        _controller.execute();
    }

}
Jetzt kannst du ein und denselben Button verwenden und per dependency injection mit kontextspezifischer Logik versehen.

Code:
public interface IController {
    function execute() : void;
}

public class NextButtonController implements IController {
    private var _model : IModel;

    public function NextButtonController(model : IModel) {
        _model = model;
    }
 
    public function execute() : void {
        _model.activateNext();
    }
}

public class PreviousButtonController implements IController {
    private var _model : IModel;

    public function PreviousButtonController(model : IModel) {
        _model = model;
    }
 
    public function execute() : void {
        _model.activatePrevious();
    }
}
Zum erzeugen der Buttons:
Code:
var nextButton : Button = new Button(new NextButtonController(myModel));
var previousButton : Button = new Button(new PreviousButtonController(myModel));
Hoffe das hilft dir.
__________________
http://blog.johannes-hodde.com
JoH ist offline   Mit Zitat antworten
Alt 10-02-2011, 11:26   #3 (permalink)
Neuer User
 
Benutzerbild von flash_newbie
 
Registriert seit: Feb 2007
Beiträge: 215
Thumbs up

ah ok , also dann würde ich das Verhalten über viele Controller steuern, und weitestgehend aus dem View raushalten. Mal sehen, ob ich dass bei mir noch so umbauen kann. (Ich habe mit den Views angefangen, insofern ist bei denen schon ein bißchen Logik drin, die den Bildaufbau regelt. Wahrscheinlich werde ich den Aufbau aufgrund der verfügbaren Zeit erstmal so lassen müssen).

Vielen Dank, dass bringt mich schon mal ein Stückchen weiter.
flash_newbie ist offline   Mit Zitat antworten
Alt 10-02-2011, 11:31   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.382
Der Button sollte keine Controller kennen...
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mvc

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
Logik Frage .. Files / File / Db Funkey PHP und MySQL 4 23-11-2007 21:24
logik problem crustymalte Flash MX 2004 4 25-03-2006 18:23
[logik frage] denkanstoss beim scrolling bloba ActionScript 1 7 11-03-2006 00:40
LoGiK PsychoFlasher Flash MX 2004 8 01-05-2005 18:46
logik JensEickhoff ActionScript 1 4 22-08-2003 14:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele