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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-02-2006, 01:00   #1 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
schöne namenskonvention für asynchrone methoden

Schöne Namenskonvention

Neulich habe ich bei MS in der .NET Dokumentation gestöbert und bin auf einen Artikel über
asynchrone Programmierung gestossen den ich interessant fand. Als Flasher sind wir in der Richtung
ja einiges gewohnt. Wie auch immer, interessant fand ich vor allem die Namensgebung für die Methoden.
Das zeige ich euch am besten am Beispiel, z.B. XML laden

Code:
    class Test {function loadXMLAsynch( url:String){      var x:XML = new XML();      //      var self:Test = this;      x.onLoad = function(success:Boolean){        if( ! success){          self.loadXMLError( this);        } else {          self.loadXMLComplete( this);        }      x.load(url);}function loadXMLComplete( x:XML){       //...}function loadXMLError( x:XML){       //...}}

Also eine Methode, die asnychron ablaeuft, bekommt Asynch an ihren Namen hinten angehängt.
Die Ergebnishandler bekommen entsprechend Complete und Error angehängt. Eine Kleinigkeit
nur, aber schön zu lesen finde ich. Man kann sogar noch loadXMLProgress nach dem gleichen System
integrieren. Da hat man sie gleich alle unter einem Hut

Wer hat sowas in der Art in Petto? Dann her damit.
mfg. r

Geändert von bokel (03-02-2006 um 01:31 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 03-02-2006, 02:20   #2 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
xervus,

schön zu lesen - stimmt... allerdings gibt's das doch bei macr... adobe auch schon!? bei flashremoting z.b. heissen die servicecalls dann

Code:
    function serviceCall(x){  service.serviceCall(x); } function serviceCall_Result(result){  trace(result); } function serviceCall_Status(status){  trace(status.description); }
aber natürlich wäre so eine konvention nicht schlecht, in eigenen projekten einzusetzen

greetz, elysian.
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 03-02-2006, 12:48   #3 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
Nameskonventionen für UnitTest-"Doubles":
http://www.martinfowler.com/bliki/TestDouble.html
__________________
elias ist offline   Mit Zitat antworten
Alt 03-02-2006, 21:20   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2006
Ort: undefined
Beiträge: 70
Das Wörtchen Load impliziert für mich in Flash eigentlich immer einen asynchronen Vorgang. Bei den Callbacks könnte man sich natürlich so eine Konvention angewöhnen.
_sevenDust ist offline   Mit Zitat antworten
Alt 03-02-2006, 21:36   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Ort: In the arena
Beiträge: 165
Zitat:
Zitat von _sevenDust
Das Wörtchen Load impliziert für mich in Flash eigentlich immer einen asynchronen Vorgang.
dito meinerseits.
eigentlich ist doch sogar jeder zugriff auf externe entities in flash ein asynchroner prozess (im gegensatz zu z.bsp. sql-queries in php).
ausserdem ist mir die delegation von methoden innnerhalb einer klasse wie bei der alternativen "*_Result" remoting verfahrensweise ein greuel (man denke an 8+ servicemethoden).
vielmehr hat sich für mich die zentrale verarbeitung von ereignissen/ergebnissen eines remote-zugriffs in einer methode, welche entsprechend aussagekraeftige events (z.bsp. XmlResult, XmlFault, XmlParsed) dispatched als nützlich erwiesen. das ganze dann in eine als statisch zu implementierende klasse gewrappt (kein scattern von remote-zugriffen, sei es xml oder remoting) und eine unterscheidung von einzelnen methoden durch naming scheint mir nicht mehr nötig.

Allerdings: alles geschmackssache
auch das "asynch", "complete", etc. naming ist selbsterklärend.

cheers
-sh
__________________
+++
Even a stopped clock gives the right time twice a day
subHero ist offline   Mit Zitat antworten
Alt 04-02-2006, 10:17   #6 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Jau, da stimmt, in Flash sind die Ladevorgänge immer asynchron. Aber wenn man häufig mit anderen Sprachen arbeitet, macht es Sinn überall einheitlich vorzugehen.

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
hazy fantazy ist offline   Mit Zitat antworten
Alt 10-02-2006, 17:09   #7 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
Mit dem "Asynch" kann ich mich auch nicht anfreunden, das ist in Flash einfach zu offensichtlich, in .NET ist es halt optional da macht es Sinn.

Was ich aber viel interessanter finde ist die Konvention das "loadXML" vor die
Events zu setzen.

Beispiel:
Code:
    class XmlLoader {     function loadXml();     function addListener(listener:XmlListener); } class XmlListener {     function loadXmlSuccess();     function loadXmlFailure(); }

Ich würde sogar den Klassennamen als Präfix bevorzugen:

Code:
    class XmlLoader {     function load();     function addListener(listener:XmlListener); } class XmlListener {     function xmlLoaderSuccess();     function xmlLoaderFailure(); }

Vorteile:
* Man weiß sofort woher das Event kommt.
* Keine kollisionen mit generischen Event Bezeichnern (zb onLoad)

Nachteile:
* Bezeichner sind sehr Speziell, die API ist hier fixiert auf XML.

Also doch eher Attributes/Annotations?
__________________
elias ist offline   Mit Zitat antworten
Alt 10-02-2006, 19:05   #8 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Ort: In the arena
Beiträge: 165
Zitat:
Zitat von elias
Ich würde sogar den Klassennamen als Präfix bevorzugen:
ich würde es statt präfix lieber (semantischer) kontext nennen. man fängt an zu lesen, die klasse heisst XmlLoader, ergo wird was wohl bei load geladen ?!

Zitat:
* Keine kollisionen mit generischen Event Bezeichnern (zb onLoad)
halte ich für nicht schlimm. zumal man dies ja wiederum gelernt hat (aus dem kontext einer klasse die bedeutung des onLoad's abzuleiten, z.bsp. LoadVars vs. MovieClip vs. XML). ausserdem liebe ich die kennzeichnung von event-methoden mit "on*". on etwas passiert folgendes.
Zitat:
* Bezeichner sind sehr Speziell, die API ist hier fixiert auf XML.
finde ich eher gut. habe schon stunden in dokumentation von frameworks/apis zugebracht, welche ins alles und nichts abstrahiert haben

0.02 €
-sh
__________________
+++
Even a stopped clock gives the right time twice a day
subHero ist offline   Mit Zitat antworten
Alt 11-02-2006, 12:30   #9 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
@elias: wenn ich den Listener so speziell dafür schreiben würde, dann würde ich ihn auch gleich XMLLoaderListener nennen. Bei den Methoden ist es so eine Sache - was wenn es mehrere load methoden gäbe?

@subHero: Jo das stimmt. Es gibt noch einen Nachteil, wenn alle Methoden gleich heissen. Man kann sie schwierig finden, zumindest mit einer einfachen Textsuche. Was war eigentlich nochmal genau die Begründung für die Gleichmacherei?

mfg. r

Geändert von bokel (11-02-2006 um 12:32 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 11-02-2006, 15:22   #10 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
Also ich bin verwirrt, irgendwie klingt ihr beiden so als würdet ihr alle Variationen
gut und schlecht finden. Aber ich bin auch irgendwie unschlüssig.

Jedenfalls finde ich die "Gleichmacherei" erstmal nicht schlecht. Ein XML.load()
oder LoadVars.load() hat ja bis auf das Parsen den gleichen ablauf. Ein *load()
endet also im *onLoad(). Das Konzept zieht sich ja recht Konsequent durch
Flash und finde es von daher schön transparent. Aber durch die Typisierung
finde ich es weniger leicht austauschbar. Angenommen ich nutze Bokels erstes
Beispiel, aber muss jetzt LoadVars nutzen. In dem Fall würde ich die Klasse
komplett neu schreiben, nur das die Typiserungen und Namen auf LoadVars
ausgerichtet sind. Bis auf das Parsen bleibt aber der Ablauf gleich und es wäre
streng genommen duplizierter Code. Wenn ich statt XML und LoadVars einen
GenericLoader hätte müsste ich nur die Parser routine ändern.
Ein brilliantes Gegenstück ist die Stream API von PHP, egal ob ich einen
Socket, das Dateisystem, FTP o.ä. anspreche ich kann überall fread(), fwrite()
etc. einsetzen. Um die Quelle zu ändern muss ich lediglich meine Klasse mit
einer anderen Resource füttern.
Ich denke das diese "generischen" Namenskonventionen die eine oder andere
Tür öffnen. Es ist aber auch eine Frage ob oder eher wie man Typisierung
einsetzt. Letztlich würde ein "Loader" Interface in XML und LoadVars das
Problem teilweise lösen.

Meinungen?
__________________
elias ist offline   Mit Zitat antworten
Alt 11-02-2006, 18:12   #11 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
Schlagwort ist dabei GenericLoader.
Ich handle das loading verhalten mitlerweile für alle externen quellen
über eine Loader klasse. Diese agiert dabei als Proxy für das loading und nutzt dabei die klasischen events

onLoadStart, onLoadComplete, onLoadProgress und onLoadError,

dabei werden alle LoadTargets unterstützt die dem Interface ILoadable entsprechen,
ILoadable verlangt nach

getBytesTotal() und getBytesLoaded()

sowie einer load methode. ausnahmen machen dabei MovieClips, Sounds und videos diese handle ich speziell, diese haben ja geine generische load methode
(warum auch immer)

Der Vorteil des ganzen ist ein immer gleichbleibendes Interface anzusprechen was intern je nach LoadTarget entscheidet wie wo was .

Das ganze hat einen Hauch von der EierlegendenWollMilchSau ist aber noch an der Granze und meiner meinung nach durchaus vertretbar.

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 11-02-2006, 20:56   #12 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Polymorphie ist natürlich ein guter Grund für Gleichmacherei. Aber auf der anderen Seite habe ich auch schon erlebt, dass in einem groesseren Stück Code die Funktionen solcherart ähnliche oder sogar gleiche Namen hatten, dass man echt nicht mehr wusste, was Sache ist. Im Sinne von OOP wäre es ja richtig, dass man nicht genau weiss, was in Detail passiert, aber zum Verständnis des Codes ist es dann wichtig, dass die Methoden auf der Metaebene (unterhalb der alle Objekte gleich behandelt werden) sinnvolle Namen haben, so dass man sich daraus zusammenreimen kann, was wirklich passiert. Sonst muss man doch wieder in die Klassen oder deren Doku reinschauen. Als extremes Beispiel stell dir mal vor, deine Objekte haben alle nur eine Funktion namens execute, z.B. XMLLoader.execute entspräche also dann XMLLoader.load - extremes Beispiel, ist schon klar. Es soll auch nur zeigen, dass gute Namen nicht nur Schall und Rauch sind

Zitat:
irgendwie klingt ihr beiden so als würdet ihr alle Variationen
gut und schlecht finden.
Das ist wohl auch so. Ich würde gerne mal eine Punkt erreichen, an dem ich von einem älteren Stück meines Codes sagen kann, wow, gut lesbar und macht was es soll

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 (11-02-2006 um 21:00 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 12-02-2006, 13:51   #13 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
@atothek
Ja ganau darauf wollte ich hinaus. Hast du Lust deine API genauer zu skizzieren,
wie sieht z.B. deine "GenericLoader" Schnittstelle aus?

@hazy fantazy
Ja das ist schon richtig, die Namen sollten aussagekräftig sein und nicht in die
Irre führen. Aber wenn ich Daten lade dann ist es mir erstmal schnurz was
es für Daten sind, die Unterscheidung mache ich ja erst wenn die Daten
da sind und ich sie verarbeiten möchte.
__________________
elias ist offline   Mit Zitat antworten
Alt 04-03-2006, 09:59   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Nur der Vollständigkeit halber: Hier ist der Link, auf den ich mich in meinem ersten Post bezogen habe: http://msdn2.microsoft.com/en-us/library/e7a34yad.aspx
bokel 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 06:37 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele