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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-07-2010, 14:32   #1 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Question MVC: mehrere Model-Instanzen

Hi Forum,

ich hab in meinem MVC (nach "Moock") ein Model, das ich instanziieren möchte, also z.B. "Auto_1" + "Auto_2". Man soll im Programm zwischen beiden hin-und her schalten können, so dass dann jeweils das gewählte, mit seinen jeweiligen Parametern, angezeigt wird.

Ablauf ist ja so: Container MC bauen => Modell erstellen => Views "auf Modell" erstellen...

Mal ein bisschen Code, wo alles zusammen läuft:
Code:
class Auto
{
	/*
	 * constructor
	 */
	public function Auto (target:MovieClip, specs:Object)
	{
		//
		// the model
		//
		auto_model = new AutoModel (specs);
		//
		// the views
		//
		auto_heightView = new HeightView (auto_model, undefined, target, depth++, 280, 295);
		.
		.
		.
		//
		// making the views observe the model
		//
		auto_model.addObserver (...)
		.
		.
		.
	}
	/*
	 *  M A I N
	 */
	public static function main (target:MovieClip, models:Object):Object
	{
		var auto_1:Auto = new Auto (target, models.auto_1);
		var auto_2:Auto = new Auto (target, models.auto_2);
	}
}
Ich grübel jetzt seit einer Weile, wie ich das löse und hatte folgende Ansätze:

- für jede Instanz alle Views anlegen und füllen und dann je nach Modell-Wahl sichtbar machen => doof, weil Views doppelt sind (~15 Views momentan)
- im Modell-Konstruktor ein Array anlegen, welches die Parameter der einzelnen Modelle aufnimmt und dann auf diesem Array arbeiten...

Beides fühlt sich aber nicht richtig an und, weil die Umstellung einen gewissen Aufwand bedeutet, will ich nicht "rumprobieren"...

Wie löst man sowas?

Gruss,
T

Geändert von twietee (26-07-2010 um 14:40 Uhr)
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 06:10   #2 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 518
Post View aus der Auto

Hat eine Zeit gedauert und ich verstehe auch immernoch nicht ganz, was Dein Problem ist. Eigentlich glaube ich, dass Du nicht willst, dass für jede Instanz von Auto ein kompletter ViewGraph entsteht.

Allerdings macht mich dein Code stutzig. In der main() übergibst Du dem Auto sein Modell, aber in der Auto Klasse selber kommt diese nicht an und du erzeugst darin ein neues.

Ich löse die Trennung so, dass ein Modell getrennt von der View erstellt wird. Die View hat eine onModelData(data:ModelEvent) Methode und ich verbinde in einer Controller Klasse Model mit View.
PHP-Code:
model.addEventListener(ModelEvent.DATA,view.onModelData,false,0,true
In der Controllerklasse erzeuge ich erst das Modell, dann die View (die sich selber darum kümmert all ihre kleinen internen Views zu erzeugen. Und wenn ModelData in der View ankommt, zerpflückt die View die Daten und leitet sie in die Einzelviews weiter.

Wenn jetzt ein neues Model (anderes Auto) angezeigt werden soll, brauche ich nur das erste Model abzulösen und das neue anzudocken
PHP-Code:
model1.removeEventListener(ModelEvent.Data,view.onModelDatafalse);
model2.addEventListener(ModelEvent.DATA,view.onModelDatafalse0true); 
Es besteht also nur eine View, die die jeweiligen Daten verschiedener Modelle anzeigt. Wenn man will, kann man natürlich noch x Views dazu erstellen und sie mit y Modellen verknüpfen.
Wenn ich jetzt, z.b durch die Kontrollerklasse das Model anrege, einmal seinen aktuellen Zustand zu broadcasten, zeigt die im Moment einzige View die neuen Daten von Model2.

Passt das zu dem, was Du zur Frage hattest?
malthoff ist offline   Mit Zitat antworten
Alt 27-07-2010, 18:39   #3 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Hi Dr. Ache,

und vielen Dank für die Antwort ersteinmal!

Mein Problem hast du schon richtig erfasst -- ich möchte einen duplizierten View-Graph vermeiden (hätte ich natürlich auch gleich so ausdrücken können ).

Die Möglichkeiten deiner Version hören sich verlockend an.
Allerdings gibt's da mehr oder weniger 2 Probleme:
1. ich müsste alles umstricken und das kostet mich gerade zu viel Zeit (das ist das größere Problem)
2. dass das Model dem View lauscht, finde ich irgendwie unrichtig, ich denke da aber wohl zu pragmatisch...

Vielen Dank nochmal für deine Antwort, Gruß,
T

P.S.: die "models" in der main-Methode sind die Auto-Modelle, keine aus dem MVC ist aber leicht irritierend in dem Zusammenhang, ich weiß
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 18:52   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Du programmierst in ActionScript 2?
Omega Psi ist gerade online   Mit Zitat antworten
Alt 27-07-2010, 18:54   #5 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Du programmierst in ActionScript 2?
Jup, genau.

Deshalb geht bestimmt das, was du mir tolles vorschlagen wolltest, nicht. Richtig?

Gruß,
T
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 19:03   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Nein, das nicht. Was ich dir vorschlagen würde sind verschiedene Modelle. Die werden dann über den Controller in einen View gesteckt.

Dr.Aches Code ist hingegen AS3.
Omega Psi ist gerade online   Mit Zitat antworten
Alt 27-07-2010, 19:07   #7 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 518
Hab meinen Beitrag nochmal durchgelesen. Wo schreibe ich denn, das das Model auf die View hört. Genau andersrum hab ich es gemeint. View wird beim Model als listener angemeldet. Gibt es neue Daten im Model wird die View davon in Kenntnis gesetzt.
malthoff ist offline   Mit Zitat antworten
Alt 27-07-2010, 19:09   #8 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Zitat:
Zitat von Omega Psi Beitrag anzeigen
... Was ich dir vorschlagen würde sind verschiedene Modelle. Die werden dann über den Controller in einen View gesteckt.
Hmm, genauer bitte?!

Das größte Problem, das ich gerade sehe, ist das wechseln zwischen den Modellen, weil -- bei nur einem View-Graph -- die Views ja komplett neugezeichnet werden müssen.

Ich glaub ich hack da mal was zusammen, das funktioniert -- OMG

Bin aber weiterhin für Vorschläge offen und wirklich interessiert, wie man die Sache "professionell" löst. Hab jetzt schon so eine tolle Grundarchitektur, da wäre schade, wenn die den letzten Feinschliff nicht bekommt!

Danke + Gruß,
T
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 19:13   #9 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Zitat:
Zitat von Dr.Ache Beitrag anzeigen
Hab meinen Beitrag nochmal durchgelesen. Wo schreibe ich denn, das das Model auf die View hört. Genau andersrum hab ich es gemeint. View wird beim Model als listener angemeldet. Gibt es neue Daten im Model wird die View davon in Kenntnis gesetzt.
Sorry, ich hab auf den Code geschaut und das
Code:
model.addEventListener(...
sah für mich so aus, als ob das Model auf ein Ereignis wartet.

Bin wohl grad bisschen verwirrt

Gruß,
T
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 19:19   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Dann zeig doch mal, was du hast, wenn es um den Feinschliff geht. UML?
Omega Psi ist gerade online   Mit Zitat antworten
Alt 27-07-2010, 19:32   #11 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Dann zeig doch mal, was du hast, wenn es um den Feinschliff geht. UML?
UML wäre toll! Gibt's dafür Tools, die meinen Code durchrödeln und das dann ausspucken? Alles andere geht gerade leider nicht, da zu zeitaufwendig!
Auf die Schnelle hab ich jetzt keine solchen Tools gefunden, normalerweise macht man das ja auch anders'rum (erst UML, dann Code )...

Danke + Gruß,
T

P.S.: Das gehört jetzt wahrscheinlich nicht hier her. Aber ich möchte Euch und Eure Hilfsbereitschaft mal explizit loben -- ihr seid unglaublich!
twietee ist offline   Mit Zitat antworten
Alt 27-07-2010, 19:55   #12 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Deine Modelklassen für die Autos hast Du ja scheinbar schon parat.
Schreib doch einfach ein weiteres Model (AutoContainer), dass eine Liste deiner aktuellen Autos verwaltet und zudem einen Verweis auf das aktuelle Element.
Dann noch einen Controller der den "Zeiger" auf das aktuelle Element schreibt.
Eine View observed dann dieses Model und bekommt bescheid wenn sich das aktuelle Element ändert und rendert den eben jenes Element.
JoH ist offline   Mit Zitat antworten
Alt 28-07-2010, 05:26   #13 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 518
Zitat:
Zitat von twietee Beitrag anzeigen
P.S.: Das gehört jetzt wahrscheinlich nicht hier her. Aber ich möchte Euch und Eure Hilfsbereitschaft mal explizit loben -- ihr seid unglaublich!
Jetzt wo Du es sagst - ich bin nicht wirklich in vielen Foren unterwegs aber in denen, die ich kenne, findet man nicht so schnell Hilfe, wie hier. Mag an der Masse liegen, oder an der Vielzahl an hilfsbereiten Leuten in dem "Genre" :-) Ich finds auch klasse!
malthoff ist offline   Mit Zitat antworten
Alt 28-07-2010, 06:39   #14 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 484
Zitat:
UML wäre toll! Gibt's dafür Tools, die meinen Code durchrödeln und das dann ausspucken? Alles andere geht gerade leider nicht, da zu zeitaufwendig!
Auf die Schnelle hab ich jetzt keine solchen Tools gefunden, normalerweise macht man das ja auch anders'rum (erst UML, dann Code )...
Joa Ebert hat so ein Tool Programmiert.
apparat - Project Hosting on Google Code
Zitat:
# Dump

* Export DefineBitsJPEG2 images
* Export detailed ABC information
* Inheritance graph generation
* Show SWF tags
* UML diagram generation
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website
Linowitch ist offline   Mit Zitat antworten
Alt 28-07-2010, 07:58   #15 (permalink)
Alter User
 
Registriert seit: Apr 2010
Ort: Deutschland
Beiträge: 128
Zitat:
Zitat von Linowitch Beitrag anzeigen
Joa Ebert hat so ein Tool Programmiert.
apparat - Project Hosting on Google Code
...schau ich mir mal an, danke!

Gruß,
T
twietee 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
gotoAndStop für mehrere Instanzen?? burn4ever ActionScript 1 1 04-03-2008 10:13
AS auf mehrere Instanzen legen skamarkus ActionScript 1 7 27-03-2006 16:31
Colorobjekt für mehrere Instanzen Phil Hobbes ActionScript 1 14 20-04-2003 22:42
mehrere instanzen ansprechen... matzilla Flash 4 und Flash 5 10 31-03-2002 15:29
Mehrere Instanzen ansprechen christian_10 ActionScript 1 2 29-03-2002 03:07


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele