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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-03-2007, 23:18   #1 (permalink)
Waffe==Verstand
 
Benutzerbild von p-flash
 
Registriert seit: Jul 2004
Ort: Düsseldorf
Beiträge: 724
Entwurfsproblem

Hi,

ich möchte mit Hilfe einer XML-Datei die Ansicht generieren. Ich hatte mir überlegt die XML-Datei so aufzubauen:

HTML-Code:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<elements>
	<modifiableElement id="1" attachId="dasMc_mc" class="ModifiableElement" sectionId="2">
		<attributes scaleable="1" hideable="1" moveable="1" editable="0" posFixed="0" hidden="0" />
		<container  depth="4">_x:10;_y:50;_xscale:150;_yscale:150;...</container>
	</modifiableElement>
   	.
	.
	.
</elements>
Die Klassen-Methode createView(xmlStr : String) der Klasse ModifiableElement sorgt dann für die Generierung der Seite:

Code:
    ModifiableElement.createView(xmlStr);

Dabei arbeitet die Methode ungefähr so:

Code:
    var nodes : Array = xmlStr.firstChild.childNodes; for (var i = 0; i < nodes.length; i++) {     var modElem : ModifiableElement = new ModifiableElement();     modElem.create(nodes[i]); }

Das klappt alles ganz gut. Das Problem ist, wenn ich ModifiableElement erweitern möchte. Also ExtendedModElem extends ModifiableElement. Und in der XML nun auch solche Elemente speichere:

HTML-Code:
.
.
<modifiableElement id="1" attachId="dasMc_mc" class="ExtendedModElem" sectionId="2">
		<attributes scaleable="1" hideable="1" moveable="1" editable="0" posFixed="0" hidden="0" />
		<container  depth="4">_x:10;_y:50;_xscale:150;_yscale:150;...</container>
	</modifiableElement>
.
.
Die Änderung ist bei class="ExtendedModElem"
D.h. dass createView(); jetzt unterscheiden muss ob ein ModifiableElement- oder ein ExtendedModElem-Objekt erstellt werden soll. Das würde so klappen:

Code:
    // __class = der Wert in class="dieKlasse" if (__class == "ModifiableElement") new ModifiableElement(); else if (__class == "ExtendedModElem") new ExtendedModElem();

Das Problem ist, dass bei jeder Klasse die dazu kommt, ModifiableElement.createView() angepasst werden müsste. (Außer weiß ich auch nicht ob es guter Stil ist in der Oberklasse explizit Unterklassen anzusprechen) Vor allem dauert die Berechnung natürlich ziemlich lange, wenn es mehrere dieser Klassen gibt (alle dieser Klassen sind (indirekte) Unterklassen von ModifiableElement).

Meine Frage ist, ob ihr vielleicht eine gute Idee habt, wie die XML-Struktur sein könnte um das Problem zu lösen. Oder ob die Klassenstruktur irgendwie so geändert werden sollte, dass das Problem gut gelöst werden kann.

Bin dankbar für jeden Tip.

p-flash
p-flash ist offline   Mit Zitat antworten
Alt 17-03-2007, 23:33   #2 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.401
Zitat:
Zitat von p-flash Beitrag anzeigen
Code:
    // __class = der Wert in class="dieKlasse" if (__class == "ModifiableElement") new ModifiableElement(); else if (__class == "ExtendedModElem") new ExtendedModElem();
wie wärs mit:

PHP-Code:
new [__class](); 
mojave ist offline   Mit Zitat antworten
Alt 17-03-2007, 23:43   #3 (permalink)
Waffe==Verstand
 
Benutzerbild von p-flash
 
Registriert seit: Jul 2004
Ort: Düsseldorf
Beiträge: 724
Hi,

das wäre super. Aber klappt bei mir nicht. Hast du das gestestet?

//edit
ok, habe es raus. Der gesamte Klassenname muss angegeben werden, also com.domain.Klasse

Dank dir a lot!!

p-flash

Geändert von p-flash (17-03-2007 um 23:48 Uhr)
p-flash ist offline   Mit Zitat antworten
Alt 17-03-2007, 23:49   #4 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.401
ja ich habs getestet und war überrascht, dass es bei dir nicht geht.
aber in meinem test habe ich typisiert. nur dann geht es. (?!)

geht:
PHP-Code:
var __class:String "Test";
var 
test:Test = new [__class](); 

geht nicht:
PHP-Code:
var __class:String "Test";
new [
__class](); // geht nicht
var test = new [__class](); //geht auch nicht 
vielleicht finden wir ja eine lösung. mal testen....

Geändert von mojave (17-03-2007 um 23:50 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 17-03-2007, 23:56   #5 (permalink)
Waffe==Verstand
 
Benutzerbild von p-flash
 
Registriert seit: Jul 2004
Ort: Düsseldorf
Beiträge: 724
Schau mal meinen vorherigen Eintrag.

Nochmals danke!

p-flash
p-flash ist offline   Mit Zitat antworten
Alt 18-03-2007, 00:02   #6 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.401
also mein beispiel funktioniert nur, wenn ich typisiere.
egal ob packages oder nicht ?!?!?

aber gut, dass ich dir helfen konnte
mojave ist offline   Mit Zitat antworten
Alt 18-03-2007, 07:50   #7 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Warum das XML-Format neu erfinden, wenn es mit MXML (siehe Flex) schon eine schicke Vorlage gibt?
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 18-03-2007, 10:02   #8 (permalink)
Waffe==Verstand
 
Benutzerbild von p-flash
 
Registriert seit: Jul 2004
Ort: Düsseldorf
Beiträge: 724
Hmm..kenn mich mit Flex nicht so aus, aber ist das nicht kostenpflichtig?

p-flash
p-flash ist offline   Mit Zitat antworten
Alt 18-03-2007, 11:31   #9 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Ich meinte eigentlich nur das XML Format. Davon abgesehen gibt es aber auch das Flex SDK umsonst.
Das Format funktioniert so, dass die Nodenamen die Klassennamen sind und die Attribute sind die Eigenschaften. Über namespaces kannst du packages ansprechen. Und über innere Knoten kannst du komplexere Eigenschaften initialisieren.

PHP-Code:
 <meinNamespace:MeineKlasse xmlns:meinNamespace="de.hazy.test.*" xmlns:andererNamespace="de.hazy.auweia.*" eigenschaft1="hallo">
     <
meinNamespace:eigenschaft2>
               <
andererNamespace:AndereKlasse/>
     <
meinNamespace:eigenschaft2>
 </
meinNamespace:MeineKlasse
mfg h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (18-03-2007 um 11:40 Uhr)
hazy fantazy 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



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

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


Copyright ©1999 – 2014 Marc Thiele