Professionelle Webanwendungen mit Actionscript 3
Seite 8: Event-Modell
Event-Modell ist konsistent
Frühere Actionscript-Versionen zwangen Flash-Entwicklern für die Event-Behandlung ein unnötig kompliziertes und oftmals nur schwer nachvollziehbares Modell auf. Das neue Event-Modell vereinfacht die Arbeit mit Ereignissen. Die Nutzung der Methode addEventListener() zum Registrieren von Events gilt als Best Practice und ist in allen Klassen vorhanden, die das Interface IEventDispatcher implementieren. Das Actionscript-typische Callback-Modell aus früheren Versionen ersetzt nun ein systemweit konsistentes Event-Modell (Listing 3).
Es ist an dieser Stelle aus zwei Gründen vorteilhaft, die statische Konstante .CLICK des MouseEvent als Event-Typ zu registrieren:
- Fehler im Event-Typ entdeckt der Compiler über die Klasse
MouseEvent - bessere Performance
Aus dem letzteren Grund ist es wichtig, in Actionscript 3 und dem Flash Player 9 nicht mehr benötigte Event-Listener nach Gebrauch zu entfernen. Erfolgt das nicht, zeigt eine Referenz auf das gegebenenfalls nicht mehr benötigte Objekt, und der Player kann es nicht für die Garbage Collection freigeben – ein potenzieller Memory Leak ist entstanden. Das Problem lässt sich allerdings mit Bordmitteln beheben: Die Methode addEventListener() stellt einen Parameter weakRef vom Typ Boolean bereit. Hat dieser Parameter den Wert true, wird der Event-Listener als schwache Referenz an das Objekt gebunden und kann von einem GC-Zyklus aus dem Speicher entfernt werden, sobald nur noch ausschließlich schwache Referenzen für dieses Objekt existieren.
Positiv zu bewerten ist die Tatsache, dass Actionscript 3 eine deutliche Aufwertung durch die Verbindung mit dem von Adobe als Enterprise-Entwicklungsplattform platzierten Flex 2 erfährt. Die Flex-Community befindet sich im Wachstum und in einer Phase der zunehmenden Professionalisierung, was sich erfreulicherweise auf die Skriptsprache auswirkt. Programmierer und Architekten haben beispielsweise mit der Entwicklung und Dokumentation von Design Patterns für Flash-basierte Rich Internet Applications (RIAs) mit Flex oder Flash begonnen. Generell finden sich viele der typischen OO-Pattern in Actionscript 3 wieder, beispielsweise das Singleton-Muster (Listing 4).
Actionscript 3 unterstützt keine privaten Konstruktoren. Das führt zu einem Problem im Singleton-Muster, da sich ohne solche die direkte (und unerwünschte) Instanziierung von MySingleton nur schwer verhindern lässt. Eine Lösung hierfür bietet eine andere neue Eigenschaft der Skriptsprache. Eine .as-Datei kann mehr als eine Klasse beinhalten. Allerdings ist nur eine der enthaltenen Klassen von auÃen ansprechbar, dabei handelt es sich um die Klasse innerhalb der Paket-Definition. Die Klasse MySingletonEnforcer hat somit den Status einer "privaten Klasse" und ist nur innerhalb von MySingleton nutzbar. Dieses Verhalten lässt sich zur Absicherung gegen direkte Instanziierung nutzen.