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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-05-2006, 13:50   #1 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.586
filesystem "nachbauen"

Ich möchte für eine Anwendung eine art filesystem bauen so wie man es von einem Betriebssystem kennt.
Wenn dann der User von der Anwendung aus ein Verzeichniss auslesen lässt will ich in Flash den Inhalt dieses Verzeichnisses nachbauen.

Ich kann von den Objekten der Klasse "Directory" und "File" die aktuelle grösse der Datei ermitteln.
Wenn ich aber nun einen Ordner "Desktop" ( bezieht sich auf meine Anwendung ) anlege und in diesem wiederum einen Ordner "pics" und dann nachträglich in "pics" Dateien einfüge bekommt der Ordner "Desktop" leider nicht die Änderung der Dateigröße des Ordners "pics" mit ( was ja auch momentan logisch ist ).

Wie könnte man dieses Problem am besten aus der Welt schaffen?

Hier ein kleines Beispiel:
( das geht )
PHP-Code:
import com.rendner.as2.filesystem.*

var 
dDirectory = new Directory"Desktop" );
d.addFile( new com.rendner.as2.filesystem.File"test.txt"10 ) );
d.addFile( new com.rendner.as2.filesystem.File"test.jpg"3.5 ) );
d.addFile( new com.rendner.as2.filesystem.File"pic.jpg"100 ) );

var 
d2Directory = new Directory"pics" );
d2.addFile( new com.rendner.as2.filesystem.File"test01.gif"10 ) );
d2.addFile( new com.rendner.as2.filesystem.File"test02.gif"10 ) );
d2.addFile( new com.rendner.as2.filesystem.File"test03.gif"10 ) );

d.addFiled2 );
traced.getSize() ); 
( das leider nicht )
PHP-Code:
import com.rendner.as2.filesystem.*

var 
dDirectory = new Directory"Desktop" );
d.addFile( new com.rendner.as2.filesystem.File"test.txt"10 ) );
d.addFile( new com.rendner.as2.filesystem.File"test.jpg"3.5 ) );
d.addFile( new com.rendner.as2.filesystem.File"pic.jpg"100 ) );

var 
d2Directory = new Directory"pics" );
d.addFiled2 );

d2.addFile( new com.rendner.as2.filesystem.File"test01.gif"10 ) );
d2.addFile( new com.rendner.as2.filesystem.File"test02.gif"10 ) );
d2.addFile( new com.rendner.as2.filesystem.File"test03.gif"10 ) );

traced.getSize() ); 
Ich habe alle Daten mit angehangen ( Flash MX 2004 ).

ps.:
Falls sich einer wundert warum ich "new com.rendner.as2.filesystem.File( ... )" anstatt "new File( ... )" schreibe, das liegt daran das es von Flash selber schon eine Klasse File gibt und Flash sonst diese einbinden will anstatt meiner.
Angehängte Dateien
Dateityp: zip filesystemTEST.zip (9,6 KB, 7x aufgerufen)
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 28-05-2006, 14:20   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.586
Eine Idee hätte ich, auf mein Beispiel bezogen müsste sich der Ordner "Desktop" beim Ordner "pics" als Listener anmelden.
Dann kann der Ordner "pics" bei Änderung der Dateigrösse dieses den listenern kundtun.

Werde das mal umsetzen, falls eine eine bessere Idee hat nur her damit.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 28-05-2006, 14:30   #3 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
Also ich würde zunächst eine neue Methode einführen, addDirectory( dir : Directory ) und eine weitere Methode getDirectorySize() anstatt das ganze mit dem Visitor Pattern zu lösen. Beim adden eines neuen Directorys kannst du mit getDirectorySize() die größe des untergerodnetetn Dirs zu der größe des übergeordneten adden.

Ich bin immer der meinung, Keep it Simple. da mit Visitorn und Listenern zu arbeiten fände ich übertrieben.

MfG
Alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 28-05-2006, 14:49   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.586
Zitat:
Also ich würde zunächst eine neue Methode einführen, addDirectory( dir : Directory ) und eine weitere Methode getDirectorySize() anstatt das ganze mit dem Visitor Pattern zu lösen. Beim adden eines neuen Directorys kannst du mit getDirectorySize() die größe des untergerodnetetn Dirs zu der größe des übergeordneten adden.
Da bleibt ja immer noch das von mir angesprochene Problem.
Das 2te Beispiel im ersten Post verdeutlicht das, dort wird ein neuer Ordner erstellt und dieser in einen bereits vorhandenen Ordner gelegt.
Wenn ich aber jetzt erst die Dateien in den zuletzt erstellten Ordner lege bekommt der "Hauptordner" dies nicht mit und "denkt" das die grösse des Ordners immer noch 0 sei.

Zitat:
Ich bin immer der meinung, Keep it Simple. da mit Visitorn und Listenern zu arbeiten fände ich übertrieben.
Habe auch gerade mitbekommen das wenn ich die Idee mit den Listener umsetze die Klassen umbauen muss da die Klasse "Directory" schon von der Klasse "File" erbt.

Hatte gedacht das mit den Visitorn würde die Klasse "Directory" etwas leichter machen da dann nicht zuviel in dieser steht und diese nicht zu komplex wirkt.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (28-05-2006 um 14:50 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 28-05-2006, 15:09   #5 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
LOL aso, ja ds hab ich mal collkommen übersehen
also na da bietet es sich doch an das adden der size dem File zu überlassen.

also ich adde nen ordner zu einem ordner mit der methode addDirectory() (ich würde ne eigene methode für machen, intern kann sie ja wieder umgebogen werden, aber die API bleibt deutlicher)

okay ich hab nun d2 in ordner d1. wenn ich nun ein file adde wird die größe ausgelesen und an den übergeordneten Directory object vermittelt, Listener wäre da sicherlich eine lose bindung aber oversized.

also in eta so

d1 = new Directory();
d2 = new Directory();

d1.addDirectory( d2 );
--> intern wird nun folgendes gemacht
addDirectory( dir ) {
dir.setParent( this );
addSize( dir.getSize() );
dirList.push( dir );
}

d2.addFile( new File() );
--> intern wird nun folgendes gemacht
addFile( file ) {
file.setParent( this );
addSize( file.getSize() );
parent.updateSize();
fileList.push( file );
}

dadurch hast du eine feste bindung welcher aber naheliegen ist, wenn du eh noch listener brauchst dann kannst du das auch mit einem EventDispatcher lösen. Ich sehe da nun nicht die Notwendigkeit. mögliche Events wären onFileAdd / Remove, onDirectoryAdd / Remove.

Die EventDispatcher lösung wäre sicherlich spannend

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 29-05-2006, 08:34   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.586
Danke das sieht schon mal besser aus als die Idee mit dem EventDispatcher .
Hatte auch nicht daran gedacht das man den "Überordner" bei jedem Ordner speichern sollte ( dir.setParent( this ); ).
Werde das mal überarbeiten und bei eventuellen Problemen noch mal reinschauen.

Aber noch ne kleine Frage:
Wozu könnte ein File einen Verweis auf parent ( file.setParent( this ); ) gebrauchen?
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 29-05-2006, 10:31   #7 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
wenn sich die Größe vom File ändert, muss doch wiederum sein Überordner davon erfahren.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp 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 01:33 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele