of 74 /74
Sascha Wolter | http://www.wolter.biz Best Practices Rich Applications Prozesse und Probleme aus der Praxis am Beispiel von Flex und Flash

Sascha Wolter | Best Practices Rich

  • Author
    others

  • View
    5

  • Download
    0

Embed Size (px)

Text of Sascha Wolter | Best Practices Rich

Folie 1Sascha Wolter | http://www.wolter.biz
Best Practices Rich Applications Prozesse und Probleme aus der Praxis am Beispiel von Flex und Flash
Sascha Wolter | http://www.wolter.biz 2
Über mich
• Sascha Wolter (www.wolter.biz) ist Entwickler und Architekt für Rich Applications auf der Basis von AIR, Flash, Flex und Silverlight. Bereits seit 1995 arbeitet er freiberuflich als Berater, Autor und Trainer. Sascha ist ebenfalls durch zahlreiche internationale Vorträge auf den führenden Konferenzen wie der „Flashforward“ und „Flash on the Beach“ bekannt. Seine Bücher und Artikel rund um Flash, Flex und den Flash Media Server zählen zu den meistgelesenen Publikationen. Als Gründer der führenden deutschsprachigen Adobe User Group flashforum.de engagiert sich Sascha auch für die Belange der Anwender.
• Veröffentlichungen – Video Training Flash CS3 – Video Training Flex 3 Grundlage – Video Training Silverlight 2 (demnächst)
• Stille Post – Designer und Developer Workflow
• Architektur – Erfahrungsberichte und Vergleich von Frameworks
• Auf Zuruf – Fragen und Antworten aus der Praxis
Sascha Wolter | http://www.wolter.biz
Sascha Wolter | http://www.wolter.biz
LOST IN FLEX
Sascha Wolter | http://www.wolter.biz
• Der englische Begriff "rich" steht dabei für die "reichhaltigen" Möglichkeiten wie z.B. Drag-und-Drop-Fähigkeit oder Bedienbarkeit über Tastenkürzel.
Außerdem ist auch die Leistungsfähigkeit der Applikation gemeint, die z.B. Berechnungen auf Clientseite ausführen kann, ohne eine Anfrage zum Server starten zu müssen. Dadurch lassen sich RIAs viel flüssiger bedienen und geben Rückmeldungen sofort zurück.
Man könnte diese Anwendungen auch "intelligente Clients" nennen. Natürlich sind diese Anwendungen Internet- optimiert (durch Komprimierung sowie Streaming-Techniken). RIAs müssen zur Laufzeit weniger Anfragen an den Server stellen.
Sascha Wolter | http://www.wolter.biz
(Inhalte)
Flash CS3 Professional
Flash CS3 Professional
Flex Builder IDE
.swf
Compile
.swf
Sascha Wolter | http://www.wolter.biz
MXML and ActionScript
Flex Builder IDE
Apollo Runtime
Systemarchitektur
Thin-Client CPU Auslastung unter Last
• Mehr Nutzer mit gleicher Infrastruktur
• Reduzierte Bandbreite
• Lösungen – Schlechte Usability: Alles modal; – Sehr schwer: Konfliktmanagement und explizite Synchronisierung; – Asynchron und „versteckt“ modal!
• Data Services – Veraltete Daten (Managed)
Sascha Wolter | http://www.wolter.biz
Flash CS 3 (Design und Animation)
Dreamweaver CS 3 (HTML und JavaScript)
Anwendungen
Laufzeitumgebungen
(Client)
Programmiermodelle
Serverkomponenten
Adobe AIR (Desktop RIAs )
Flash Mobile (Flash Lite )
ActionScript 3 (ECMA Script)
FlashCast (Mobile Push Services)
Kommando Zeilen Compiler, Debugger u. Profiler
MXML und ActionScript 3.0
Flex Framework und Klassenbibliothek
Sascha Wolter | http://www.wolter.biz
Code-basierter Ansatz Java/.NET
Adressiert Design/Entwickler Team mit Flash, Multimedia kenntnissen
Scripting, Grafikdesign, Visuelle Tools
Flex Builder Features
Design Ansicht Visuelles Componenten Panel
Layout und Zustands Modelle Visuelles Werkzeug für Begrenzungs-basiertes Layout Automatisches Ausrichten und Skalierung von Komponenten Visuelles Gestalten von Komponenten oder Anwendungs Zuständen
Unterstützung Für Skinning und Styling Vollständiges Rendering von angepassten Skins und Komponenten Eigenschaften Inspektor zum setzen von Komponenten Stylen
Coding Intelligenz Codeeinfärbung für AS, MXML, CSS Code-Vervollständigung Schnelle Quell Code Navigation
Debugger und Profiler Interaktiver Debugger Variablen, Ausdruck Fenster In-line Notation von Compiler Fehlern und Warnhinweise Performance und Speicherprobleme finden
Sascha Wolter | http://www.wolter.biz
Editor Flash Autorensystem basiert auf Eclipse basiert auf
Eclipse basiert auf
ActionScript 1 ActionScript 2 ActionScript 3 MXML
+ + + -
- - + +
- + + +
- + - -
- + + -
Compiler Flash/Flex Flex nutzt MTASC und SWFMill MTASC MTASC, Flex,
Flash
Open Source
• Bug Database – http://bugs.adobe.com/
• Open Screen Project (http://www.adobe.com/openscreenproject/)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Label text="Hello World" />
<mx:Label>
<mx:htmlText>
<![CDATA[<font color="#FF0000">Single Line Text with HTML</font>]]>
</mx:htmlText>
</mx:Label>
• MXML versus ActionScript – MXML ist XML – Schreibweise – Namespaces – ActionScript mit –keep sehen
• Metacommands – Z. B. Bindings
Button, CheckBox, ComboBox, DataGrid, …
Datenbindung, Datenüberprüfung und Datendienste
Framework per ActionScript nutzen
// singleton super();
} }
}
• http://www.flashforum.de/forum/showthread.php?t=210238
Sascha Wolter | http://www.wolter.biz
Sascha Wolter | http://www.wolter.biz
Sascha Wolter | http://www.wolter.biz
nutzen!
• measure: Größe festlegen; – invalidateDisplayList
Sascha Wolter | http://www.wolter.biz
• Styles sind Module
Sascha Wolter | http://www.wolter.biz
<mx:TextInput id="username" text="" /> <mx:Button id="myButton" label="Speichern" />
Sascha Wolter | http://www.wolter.biz
CurrencyFormatter DateFormatter NumberFormatter usw,
<mx:Text width="100" text="{euroFormatter.format(100,25)}" />
Sascha Wolter | http://www.wolter.biz
Daten zwischen Objekten ausstauschen!
Daten werden automatisch von einer Quelle (source) zu einem Ziel (destination) kopiert
Curly braces {} <mx:TextInput id="tiText" width="200" text="" /> <mx:Text id="txtText" width="200" text="{tiText.text}" />
<mx:Binding>-Tag <mx:Binding source="tiText.text" destination="txtText.text" />
<mx:TextInput id="tiText" width="200" text="" /> <mx:Text id="txtText" width="200" />
ActionScript [Bindable] Metakommando
Sascha Wolter | http://www.wolter.biz
Flex data model stores data in client-side objects
A data model is an ActionScript object that contains properties and methods
You can use built-in validator classes to validate data contained in a model Two types of data models: Use MXML model (this unit) or use an ActionScript class
<mx:Model id="myModel"> <name>
</name> <address>
</address> </mx:Model>
• Lieber Wertobjekte (Value Object, kurz VOs) nehmen!
Sascha Wolter | http://www.wolter.biz
Repeatern dynamisch aufbauen. – Performance beachten!
Sascha Wolter | http://www.wolter.biz
• labelField und labelFunction – und deren Verwandte – Manchmal reicht auch toString-Methode
• Renderer – Ein Renderer ist eine Komponente, die Anstelle der Standardzeilen und -zellen in
Listen zur Anzeige genutzt wird. – itemRenderer – itemEditor – cellRenderer – rowRenderer – headerRenderer
– …
Für Animation und Bewegung
Ein Verhalten ist eine Kombination von Einem Auslöser (trigger): Z. B. ein Mausklick auf eine Komponente Ein Effekt (effect)
Verfügbare Effekte: Blur Dissolve/Fade Move Resize usw.
<mx:Fade id="fade" duration="1500" alphaFrom="0.2" alphaTo="1.0" />
<mx:Button label="Klick mich!" mouseDownEffect="{fade}" />
Sascha Wolter | http://www.wolter.biz
<mx:states> <mx:State name="state1">
</mx:State> </mx:states>
<mx:Parallel> <mx:Move target="{myButton}" duration="1000" />
<mx:Resize target="{myButton}" duration="1000" /> </mx:Parallel>
</mx:Transition> </mx:transitions>
• XML einbetten – E4X
• ActionScript Varianten – Inline – ActionScript-Block – Klassen
• Auf Fehlersuche – Ausgabe (trace) – Debugger und Profiler
Sascha Wolter | http://www.wolter.biz
Fehlerbehandlung − Synchron (Try-Catch-Blöcke) − Asynchron (Ereignisse)
Variablen und Eigenschaften
Funktionen und Methoden
Sascha Wolter | http://www.wolter.biz
3 Arten zur Änderung des Erscheinungsbildes in Flex:
Style API nutzen Umfassende Styles für alle Steuerelemente Style-Properties werden von der Super-Klasse geerbt (nicht alle!)
Skins ändern oder austauschen Skins sind Symbole um Oberflächenelemte anzuzeigen Grafische Skins Programmatische Skins
Theme zuweisen Eine Sammlung von Styles und Skins wird als Theme verwaltet
Sascha Wolter | http://www.wolter.biz
• Inline Styles – Als Attribute innerhalb einer Komponente <mx:Button label="My Button" color="#FF0000" cornerRadius="3" />
• Local Styles – Als <mx:Style> Tag innerhalb eines MXML Dokuments <mx:Style>
.myFontStyle {font-size:14;color:#FF0000} Button {color:#FF0000}
</mx:Style>
– CSS Style und MXML Style Label {
font-weight:normal; fontSize:14
}
Sascha Wolter | http://www.wolter.biz
4) Design Optimierungen
Sascha Wolter | http://www.wolter.biz
Browser / Operating System
• Vorteil: – Instanznamen bleiben erhalten; – Ganze SWF-Dateien und Symbole (Linkage);
• Syntax: <mx:Image source="@Embed('assets/images/flex_embed.swf')" /> <mx:Image source="@Embed(
source='assets/images/flex_embed.swf', symbol='linkage', mimeType='application/x-shockwave-flash', scaleGridTop='25',scaleGridBottom='125',scaleGridLeft='25',scaleGridRight= '125')" />
LocalConnection (AVM1/AVM2); • Vorteil:
– Nur komplette SWF-Dateien; • Syntax:
Sascha Wolter | http://www.wolter.biz
import flash.display.MovieClip; [Embed(source="bee.swf",
} }
• Verwenden mc = new Bee(); mc.stick.scaleX = 2; mc.x = 100; mc.y = 100; addChild(mc);
• Nachteil: – Code geht verloren (bei ActionScript 2);
• Vorteil: – Instanznamen bleiben erhalten;
var Name:Class; – Parameter:
Sascha Wolter | http://www.wolter.biz
• Nachteil: – Kommunikation geht bei ActionScript 2 nur per LocalConnection (AVM1/AVM2); – Nur komplette SWF-Dateien;
• Vorteil: – Kommunikation geht bei ActionScript 3 per ActionScript (AVM2/AVM2);
• Syntax: loader = new Loader(); loader.load(new URLRequest("flash.swf")); addChild(loader);
Sascha Wolter | http://www.wolter.biz
Bereitstellung für möglichst viele Formate und Plattformen Designer zu Designer
Designer zu Entwickler
Inhalts-Designer zu Inhaltskonsument
http://www.adobe.com/go/flex3_cs3_swfkit
CS3 und Flex
Sascha Wolter | http://www.wolter.biz
Import Skin Assets into Flex Builder Create Flex Components in Flash CS3
MXML and CSS
CS3 templates make it easy to create custom component skins
Flash developers can easily package work as Flex components
Flex Component Kit for Flash CS3
Für die Nutzung von Flash in Flex Inkl. Zeitleiste usw.; Sowohl in Flash als auch Flex nutzbar; Erzeugt eine Bibliothek (Library);
Schritt für Schritt: 1. Passende Version des Flex SDKs beachten; 2. Erstelle Flash Inhalt als MovieClip Symbol mit erlaubtem Bezeichner und
Registrierungspunkt oben links; Empfohlen sind 24 Bilder pro Sekunde; 3. Prepariere Flash MovieClip Symbole für Flex über das Kommando “Make
Flex Component” und veröffentliche anschließend ein SWC; 4. Übertrage den Flash Inhalt nach Flex in dem die Bibliothek hinzugefügt
wird;
• Compiletime CSS – Library-Projekt mit CSS-Datei
Sascha Wolter | http://www.wolter.biz
Eigene Flash Erweiterung
• MXP (Flash Extension) – z. B. JavaScript API – z. B. Komponenten – z. B. Templates
• MXI – http://download.macromedia.com/pub/exchange/mxi_file_format.pdf
Sascha Wolter | http://www.wolter.biz
Presumptions: Framework definition
• What is a Framework? – Steve Webster: “When developers write large pieces of code that they
consider significant enough to consider leveraging on other projects, they tend to supplement the code with this term. Thus there are many types of frameworks: persistence frameworks, transaction frameworks, logging frameworks, aspect-oriented frameworks, animation frameworks, unit- testing frameworks, and the like.”
• A Framework usually covers the following issues – Application specific Classes like Loggers, Collections, Models etc. – Architecture specific Classes like the Model View Controller Design Pattern
• Famous design pattern: Model View Controller – View (Components) – Models (Data) – Controller (can be managed via Events and Commands)
• Game engine – Game developers call a Framework “Engine”
Sascha Wolter | http://www.wolter.biz
Presumptions: Steeling is permitted!
• Justification: – Do not invent the wheel again – Inspiration is no theft – Using someone's idea means to understand it – Similar architectures makes teamwork easier
• Inspiration – Java and Java Swing – Flex 2 Framework and Cairngorm
• Good example: Design patterns are stolen ideas! • Adapt existing ideas, do not simple copy them • Be always able to explain your acting
Sascha Wolter | http://www.wolter.biz
• Keep in mind: – Different skills of programmers – Maintenance – Future-proof – Coding conventions might help
• Bad example: Design patterns can become very abstract and complex! – Well, you know how it works but you do not know what for!
Sascha Wolter | http://www.wolter.biz
• Alles schon fertig – Cairngorm (http://labs.adobe.com/wiki/index.php/Cairngorm) – PureMVC (http://puremvc.org/) – EasyMVC (http://projects.simb.net/easyMVC/)
Sascha Wolter | http://www.wolter.biz
Rich Internet Application development." – Allgemein: Cairngorm ist eine Best-Practice Sammlung von Ansätzen und
Entwurfsmustern, um skalier- und wartbare Flex 2 Anwendungen zu entwickeln.
• Idee – Ursprüngliche 2002 von iteration::two (jetzt Adobe Consulting, Edinburgh, Schottland) – Portierung von J2EE Blueprint Patterns nach
• Versionen – ActionScript 1.0 und Flash MX, später AS 2.0 – Veröffentlichung Cairngorm 0.95 für Flex 1.5 während der MAX 2004 in New Orleans – Cairngorm 2 zeitgleich mit Flex 2 im Juni 2006 – Aktuelle Version 2.1 – Open Source (BSD Lizenz) – labs.adobe.com
Sascha Wolter | http://www.wolter.biz
• Motivation – Anforderungen an die Anwendung
• Modularität, Erweiterbarkeit, Skalierbarkeit – Flickschusterei: Zusätzliche Funktionen sind bei naiver Herangehensweise
später jedoch nur unter großem Aufwand integrierbar (und 3 Monate später weiß keiner mehr wieso, weshalb und warum).
– Teamarbeit • Eine gemeinsame „Sprache“ muss gefunden werden!
– Kommunikation (Nachichtenfluss in Anwendungen) • Wie sage ich dem DataGrid in der Hauptanwendung, dass sich die
Daten im Popup-Fenster geändert haben? • Suchmaske in der Hauptanwendung soll den gleichen WebService
aufrufen, wie auch die QuickSearch in der Menüleiste! – Vermeide unnötige Abhängigkeiten („hart verdrahtet“)
• var foo:Object = myPanel.myDataGrid.selectedItem.data; • Was passiert beim Umbenennen einer Instanz?
Sascha Wolter | http://www.wolter.biz
wiederkehredne Probleme (Muster) zu lösen. – Micro Architecture: Grundlage der internen Architektur für Anwendungen – Loose Coupling: Lose Kopplung zwischen den einzelnen Komponenten
einer Anwendung – Modularer Aufbau: Einfacher Austausch von Komponenten
Sascha Wolter | http://www.wolter.biz
• 6-teiliger DevNet Artikel (basiert teilweise noch auf Flex 1.5!) – http://www.adobe.com/devnet/flex/articles/cairngorm_pt1.html
• Cairngorm Community Project (Dokumentation und Co.) – http://www.cairngormdocs.org/
• Bibliotheken und Namensräume – Manifest
• Optimierung – use-network – debug – optimize
• copylocale – http://www.wolter.biz/?s=locale – http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Runtim
Logo=Embed("logo.png") Sorter=ClassReference("sorters.Urdu")
• Zur Laufzeit laden var eventDispatcher:IEventDispatcher = loadResourceModule(url); eventDispatcher.addEventListener(ResourceEvent.COMPLETE, completeHandler); resourceManager.localeChain = [ "fr_FR" ];
Sascha Wolter | http://www.wolter.biz
Sascha Wolter | http://www.wolter.biz
Best Practices Rich Applications
AIR zur Laufzeit
Flex Builder Features
MXML: Zur Kompilierzeit einbetten
MXML: Zur Laufzeit Laden
ActionScript: Zur Kompilierzeit einbetten
ActionScript: Zur Laufzeit Laden
Bibliotheken und Themes
Eigene Flash Erweiterung