| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| helpQLODhelp 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:
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
__________________ Ralf Bokelberg™ - Flex & Flash Consulting Geändert von bokel (03-02-2006 um 00:31 Uhr) |
| | |
| | #2 (permalink) |
| Supermassive 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:
greetz, elysian.
__________________ Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration Networks » Xing » ColdFusion Community Everything Cairngorm » cairngormdocs.org |
| | |
| | #3 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
Nameskonventionen für UnitTest-"Doubles": http://www.martinfowler.com/bliki/TestDouble.html
__________________ |
| | |
| | #5 (permalink) | |
| Neuer User Registriert seit: Jan 2005 Ort: In the arena
Beiträge: 165
| Zitat:
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 | |
| | |
| | #6 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
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 |
| | |
| | #7 (permalink) |
| flachzange 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:
Ich würde sogar den Klassennamen als Präfix bevorzugen: Code:
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?
__________________ |
| | |
| | #8 (permalink) | |||
| Neuer User Registriert seit: Jan 2005 Ort: In the arena
Beiträge: 165
| Zitat:
![]() Zitat:
Zitat:
0.02 € -sh
__________________ +++ Even a stopped clock gives the right time twice a day | |||
| | |
| | #9 (permalink) |
| helpQLODhelp 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
__________________ Ralf Bokelberg™ - Flex & Flash Consulting Geändert von bokel (11-02-2006 um 11:32 Uhr) |
| | |
| | #10 (permalink) |
| flachzange 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?
__________________ |
| | |
| | #11 (permalink) |
| Flashaholic 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 |
| | |
| | #12 (permalink) | |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
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:
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 20:00 Uhr) | |
| | |
| | #13 (permalink) |
| flachzange 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.
__________________ |
| | |
| | #14 (permalink) |
| helpQLODhelp 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
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |