als PDF

Transcrição

als PDF
Sascha Wolter | http://www.wolter.biz
Best Practices Rich Applications
Prozesse und Probleme aus der Praxis am
Beispiel von Flex und Flash
Ü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)
Sascha Wolter | http://www.wolter.biz
2
Inhalt
•
Lost in Flex
–
•
Stille Post
–
•
Designer und Developer Workflow
Architektur
–
•
Flex-Crashkurs für Flash-Designer und Java-Programmierer
Erfahrungsberichte und Vergleich von Frameworks
Auf Zuruf
–
Fragen und Antworten aus der Praxis
Sascha Wolter | http://www.wolter.biz
Flex-Crashkurs für Flash-Designer und Java-Programmierer
LOST IN FLEX
Sascha Wolter | http://www.wolter.biz
LOST IN FLEX
•
Flex verstehen
–
–
–
–
•
Flex verwenden
–
–
–
–
–
•
Rich Applications und Lightweight Desktop Application
Werkzeuge: Installation und Anpassung
Hilfe und Fehlersuche
Das erste Projekt
Flex Framework: MXML versus ActionScript
Oberflächen erstellen
Daten eingeben und anzeigen
Verhalten
Daten laden
Flex programmieren (siehe Architektur)
– ActionScript 3
– Probleme und Lösungen
– Konzepte und deren Anwendung
•
Flex gestalten (siehe Stille Post)
– Themes, Styles und Skins
Sascha Wolter | http://www.wolter.biz
Historie von Rich Applications
1996: Flash 2
2002: RIA
2004: Flex 1.0
MXML
2006: Flex 2.0
2007: AIR
2002: Central
Sascha Wolter | http://www.wolter.biz
Definition von Rich Applications
•
Rich (Internet) Applications
Das Beste des Internets
(Inhalte)
Außerdem ist auch die Leistungsfähigkeit
der Applikation gemeint, die z.B.
Desktop (Applikationen) Berechnungen auf Clientseite
ausführen kann, ohne eine Anfrage zum
• Austausch
Server starten zu müssen. Dadurch
• Leistungsfähig
• Integration
lassen sich RIAs viel flüssiger bedienen
und geben Rückmeldungen sofort zurück.
• Einfach
• Allgegenwärtig
• Standart
• Verbunden
Systemübergreifend
(Kommunikation)
• Echtzeit
• Personalisiert
• Übergreifend
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.
Man könnte diese Anwendungen auch
"intelligente Clients" nennen. Natürlich
sind diese Anwendungen Internetoptimiert (durch Komprimierung sowie
Streaming-Techniken). RIAs müssen
zur Laufzeit weniger Anfragen an den
Server stellen.
Wie Flash arbeitet!
Flash CS3 Professional
Browser
Timeline and
ActionScript
Flash Player
Flash CS3 Professional
Timeline
ActionScript
Data
Data
Web Server
Compile
XML/HTTP
REST
SOAP Web Services
Flash Remoting (AMF)
J2EE Application Server
.swf
Existing Applications and Infrastructure
Java / .NET / PHP / CGI
Sascha Wolter | http://www.wolter.biz
Wie Flex arbeitet!
Flex Builder IDE
Browser
MXML and
ActionScript
Flash Player
Flex SDK
MXML
ActionScript
Flex Class Library
Data
Data
Web Server
Compile
XML/HTTP
REST
SOAP Web Services
LifeCycle Data Services
J2EE Application Server
.swf
Existing Applications and Infrastructure
Java / .NET / PHP / CGI
Sascha Wolter | http://www.wolter.biz
AIR Entwickler Workflow
Design / Code
.air Datei
Betriebssystem
Flex Builder
Flash
Dreamweaver
LiveCycle
Designer
InDesign
Command Line
Deployment Package
Installierte Anwendung
SWF
PDF
HTML
PNG, JPEG...
Photoshop
More...
Sascha Wolter | http://www.wolter.biz
AIR am Beispiel Flex Builder!
Flex Builder IDE
Desktop
MXML and
ActionScript
AIR
AIR SDK
MXML
ActionScript
AIR/Flex Klassenbibliothek
Daten
Daten
Lokale Ressourcen
Web Server
Compile/Package
XML/HTTP
REST
SOAP Web Services
LiveCycle Data Services
J2EE Application Server
.air
Existierende Anwendungen und Infrastruktur
Java / .NET / PHP / CGI
Sascha Wolter | http://www.wolter.biz
AIR zur Laufzeit
Flex / LC Data Services
Web Services
Occasionally Connected Network
AIR Application
AIR Application
AIR Application
HTML/AJAX
Flash/Flex
Flash/Flex
HTML
Flash/Flex
AIR Application
HTML/AJAX
PDF
PDF
Apollo Runtime
Windows OS
Sascha Wolter | http://www.wolter.biz
Mac OS
Linux OS
Systemarchitektur
Thin-Client
CPU Auslastung unter Last
RIA (oder “Fat-Client”)
CPU Auslastung unter Last
• Mehr Nutzer mit gleicher
Infrastruktur
• Reduzierte Bandbreite
Sascha Wolter | http://www.wolter.biz
Asynchron und Synchron
•
Problem
– Inkonsistenz
– Datenpakete können sich überholen
•
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 Plattform im Überblick
Connect
Digital Editions
(Web Kommunikation und Kollaboration)
(EBooks)
Laufzeitumgebungen
Flash Player
Adobe AIR
Flash Mobile
(Desktop RIAs )
(Flash Lite )
(Client)
(Web BrowserPlugIns)
Anwendungen
Lösungen von
Fremdanbietern
Tools
FlexBuilder 3
(basiert auf Eclipse)
Programmiermodelle
ActionScript 3
Bibliotheken
MXML
(ECMA Script)
(Frameworks)
(XML)
Flash CS 3
(Design und Animation)
Serverkomponenten
LiveCycle Data FlashCast
Flash Media Server
(Mobile Push Services)
(A/V + Data Streaming)
Services
Kommunikation / Protokolle
SOAP
HTTP/S
AMF
PHP, J2EE oder .NET
Existierende Middleware- und Backend-Schicht
Sascha Wolter | http://www.wolter.biz
RTMP
Dreamweaver CS 3
(HTML und JavaScript)
Flex Produktlinie im Überblick
Flex SDK (kostenfrei, teilw. OpenSource)
MXML und ActionScript 3.0
Flex Framework und Klassenbibliothek
Kommando Zeilen Compiler, Debugger u. Profiler
Flex
Charting
Flex Builder
Visuelles Layout
Code Hinweise
Debugging
Skinning und Styling
Erweiterbare Charting Komponenten
LifeCycle Data Services
Message Service
Data Management Service
RPC Services (Blaze DS)
Sascha Wolter | http://www.wolter.biz
Positionierung von Flex und Flash
Flash Professional
FlexBuilder
ƒ
Entwickler, Programmierer
ƒ
Designer
ƒ
Ziel RIAs
ƒ
Ziel Inhalte (mit Daten)
ƒ
ƒ
ƒ
Self-Service Anwendungen
ƒ
Optimierte Prozesse
ƒ
Visuelle Analyse
Adressiert Teams mit klassischen
Anwendungs
entwicklungsfähigkeiten
Code-basierter Ansatz
ƒ
Java/.NET
ƒ
Marketing, Unterhaltung,
Navigation, Animation,
Simulation/E-learning, Web
Video, Online Werbung
ƒ
Erstellen vonKomponenten und
Designelementen für Flex
ƒ
Adressiert Design/Entwickler Team
mit Flash, Multimedia kenntnissen
ƒ
Scripting, Grafikdesign, Visuelle Tools
Flex + Flash = Gute Ergänzung für Flex Projekte
Sascha Wolter | http://www.wolter.biz
Flex Builder Features
ƒ
Assistenten
ƒ
ƒ
ƒ
Design Ansicht
ƒ
ƒ
Vollständiges Rendering von angepassten Skins und Komponenten
Eigenschaften Inspektor zum setzen von Komponenten Stylen
Coding Intelligenz
ƒ
ƒ
ƒ
ƒ
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
ƒ
ƒ
ƒ
Visuelles Componenten Panel
Layout und Zustands Modelle
ƒ
ƒ
ƒ
ƒ
Projekte und Dokumente anlegen
Arbeitsumgebung konfigurieren
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
Alternative Entwicklungsumgebungen
Flash
Flex Builder
Flash
Autorensystem
basiert auf Eclipse
steil
mittel
+
+
+
-
Compiler
Flash
Develop
ASDT
FDT
basiert auf
Eclipse
basiert auf
Eclipse
mittel
flach
mittel
+
+
+
+
+
+
-
+
+
-
Flash/Flex
Flex
nutzt MTASC
und SWFMill
MTASC
MTASC, Flex,
Flash
Kostenlos
Nein
Nein
Ja
Ja
Nein
Plattform
Mac/Win
Mac/Win
Win
Diverse
Diverse
Editor
Lernkurve
ActionScript 1
ActionScript 2
ActionScript 3
MXML
Sascha Wolter | http://www.wolter.biz
Open Source
•
Open Source (http://opensource.adobe.com/wiki/display/site/Home)
–
–
–
–
•
Bug Database
–
•
http://bugs.adobe.com/
Nightly Builds
–
•
Flex SDK (http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK)
Adobe Flex SDK (Flex SDK plus Adobe Add-ons)
Blaze Data Services
LifeCycle Data Services
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3
Open Screen Project (http://www.adobe.com/openscreenproject/)
Sascha Wolter | http://www.wolter.biz
Hallo Welt!
1.
2.
Projekt anlegen
MXML erstellen
<?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 color="0xFF0000">
<mx:text>Hello World</mx:text>
</mx:Label>
</mx:Application>
ƒ
Hinweis CDATA
<mx:Label text= " Single Line Text without HTML" />
<mx:Label>
<mx:htmlText>
<![CDATA[<font color="#FF0000">Single Line Text with HTML</font>]]>
</mx:htmlText>
</mx:Label>
Sascha Wolter | http://www.wolter.biz
Framework (Flex Klassenbibliothek)
•
MXML versus ActionScript
–
–
–
–
•
MXML ist XML
Schreibweise
Namespaces
ActionScript mit –keep sehen
UI-CONTAINER VBox, HBox, Form, View,
Window, …
UI-STEUERELEMENTE
Metacommands
– Z. B. Bindings
DATENMODELL
•
Datenbindung,
Datenüberprüfung und
Datendienste
Scripts
– Script-Bereich
VERHALTEN
•
Button, CheckBox,
ComboBox, DataGrid, …
Styles
– Angabe von Stilen
Sascha Wolter | http://www.wolter.biz
Trigger (Ein- und Ausblenden,
Verschieben, …)
Effekte (Ausblenden, Größe
ändern, Verschieben …)
Framework per ActionScript nutzen
package core
{
import mx.core.Application;
public class MyApplication extends Application {
public function MyApplication() {
// singleton
super();
}
override public function initialize():void {
super.initialize();
// place your code here
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<myNamespace:MyApplication xmlns:myNamespace="*" usePreloader="false"/>
•
http://www.flashforum.de/forum/showthread.php?t=210238
Sascha Wolter | http://www.wolter.biz
Steuerelemente
• Für alle Fälle: Wo ist
der Quellcode?
Sascha Wolter | http://www.wolter.biz
Layout
•
•
•
•
Container
Constraints
Navigatoren
View States
Sascha Wolter | http://www.wolter.biz
Komponenten
•
•
•
MXML Komponenten
ActionScript Komponenten
Simple-, Composite- und Template-Component
Sascha Wolter | http://www.wolter.biz
Komponenten
•
Tipp: Wenn gleiche Komponenten unterschiedlich aussehen!
– Neue Komponenten ableiten und neuen Namen als Type-Selector
nutzen!
•
Komponenten Lifecycle
– addChild
• createChildren: „Bestandteile“ erzeugen;
– invalidateProperties
• commitProperties: Auf Änderungen reagieren;
– invalidateSize
• measure: Größe festlegen;
– invalidateDisplayList
• layoutChrome: Chrome von Containern erstellen;
• updateDisplayList: Darstellung aktualisieren;
Sascha Wolter | http://www.wolter.biz
Module
•
Module sind keine Module sondern…
– …dynamisch geladene Komponenten (dynamisches Binden)
– …eine Factory (Fabrik)
•
Styles sind Module
Sascha Wolter | http://www.wolter.biz
Formulare
• Form
• FormHeading
• FormItem
Sascha Wolter | http://www.wolter.biz
Validator
ƒ
<mx:Validator> oder ActionScript
ƒ
Verfügbare Validator:
ƒ
ƒ
DateValidator
ƒ
NumberValidator
ƒ
StringValidator
ƒ
usw.
Beispiel:
<mx:StringValidator id="validName"
source="{username}"
property="text"
required="true"
trigger="{myButton}"
triggerEvent="click"
listener="{username}" />
<mx:TextInput id="username" text="" />
<mx:Button id="myButton" label="Speichern" />
Sascha Wolter | http://www.wolter.biz
Formatter
ƒ
One-Way Umwandlung von Daten in ein Stringformat
ƒ
<mx:NumberFormatter> or ActionScript
ƒ
Aufruf durch {Instanzname}.format()
ƒ
Verfügbare Formatter:
ƒ
ƒ
ƒ
ƒ
ƒ
CurrencyFormatter
DateFormatter
NumberFormatter
usw,
Beispiel:
<mx:CurrencyFormatter id="euroForatter"
precision="2"
rounding="nearest"
currencySymbol=" €"
alignSymbol="right"
decimalSeparatorFrom=","
decimalSeparatorTo=","
useThousandsSeparator="false" />
<mx:Text width="100" text="{euroFormatter.format(100,25)}" />
Sascha Wolter | http://www.wolter.biz
Ereignisse
ƒ Bubbling
ƒ Loose Coupling
ƒ Custom Events
Sascha Wolter | http://www.wolter.biz
Bindings
ƒ
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
Modelle
ƒ
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>
<firstName>Klaus</firstName>
<lastName>Mustermann</lastName>
</name>
<address>
<street>Vahrenwalderstr. 156</street>
<zipCode>30165</zipCode>
<city>Hannover</city>
</address>
</mx:Model>
<mx:Label width="200" text="{myModel.name.firstName} {myModel.name.lastName}" />
<mx:Text width="200" text="{myModel.address.street}" />
<mx:Text width="200" text="{myModel.address.zipCode} {myModel.address.city}" />
•
Lieber Wertobjekte (Value Object, kurz VOs) nehmen!
Sascha Wolter | http://www.wolter.biz
Listen, Tabellen und Trees
ƒ List
ƒ TileList
ƒ HorizontalTileList
ƒ ComboBox
ƒ DataGrid
ƒ DataGridColumns
ƒ Drag and Drop
ƒ Tree
Sascha Wolter | http://www.wolter.biz
Repeater
• Repeater
– Datengetrieben Oberflächen lassen sich mit Hilfe von
Repeatern dynamisch aufbauen.
– Performance beachten!
Sascha Wolter | http://www.wolter.biz
Renderer
•
labelField und labelFunction
–
–
•
Renderer
–
•
und deren Verwandte
Manchmal reicht auch toString-Methode
–
–
–
–
–
Ein Renderer ist eine Komponente, die Anstelle der Standardzeilen und -zellen in
Listen zur Anzeige genutzt wird.
itemRenderer
itemEditor
cellRenderer
rowRenderer
headerRenderer
–
…
Data-Eigenschaft
Sascha Wolter | http://www.wolter.biz
Verhalten
ƒ
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
Verhalten
•
Transitions
–
Effekte für den Wechsel von View States
<mx:states>
<mx:State name="state1">
<mx:SetProperty target="{myButton}" name="x" value="100" />
<mx:SetProperty target="{myButton}" name="width" value="200" />
</mx:State>
</mx:states>
<mx:transitions>
<mx:Transition fromState="*" toState="state1">
<mx:Parallel>
<mx:Move target="{myButton}" duration="1000" />
<mx:Resize target="{myButton}" duration="1000" />
</mx:Parallel>
</mx:Transition>
</mx:transitions>
Sascha Wolter | http://www.wolter.biz
Daten Laden
• Medien
<mx:Image source="@Embed('assets/images/flex_embed.gif')"
toolTip="Embedded"/>
<mx:Image source="assets/images/flex_reference.png"
toolTip="Referenz"/>
• XML einbetten
– E4X
• XML laden
– Sicherheitseinstellungen beachten
Sascha Wolter | http://www.wolter.biz
Flex programmieren
•
Rapid Prototyping
– Entwurf und Test der Anwendungsoberfläche
– Vor der Implementierung
•
ActionScript Versionen
– Von Aktionen bis hin zu ECMAScript 4
•
ActionScript Varianten
– Inline
– ActionScript-Block
– Klassen
•
Auf Fehlersuche
– Ausgabe (trace)
– Debugger und Profiler
Sascha Wolter | http://www.wolter.biz
ActionScript 3
ƒ
ƒ
Konventionen und Kommentare
−
Wartbarkeit und Fehlervermeidung
Fehlerbehandlung
−
−
Synchron (Try-Catch-Blöcke)
Asynchron (Ereignisse)
ƒ
Variablen und Eigenschaften
ƒ
Funktionen und Methoden
ƒ
Kontrollstrukturen
ƒ
Ereignisse
ƒ
Klassen und Packages
−
Anlegen eines Projektes
Sascha Wolter | http://www.wolter.biz
Flex gestalten
ƒ
Nutze Stile (Styles), um das „Look and Feel“ anzupassen
ƒ
Kann für einzelne oder alle Steuerelemente (Controls) genutzt werden
ƒ
3 Arten zur Änderung des Erscheinungsbildes in Flex:
ƒ
Style API nutzen
ƒ
ƒ
ƒ
Skins ändern oder austauschen
ƒ
ƒ
ƒ
ƒ
Umfassende Styles für alle Steuerelemente
Style-Properties werden von der Super-Klasse geerbt (nicht alle!)
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
Styles
•
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>
•
External Styles
<mx:Style source="myStyle.css" />
– CSS Style und MXML Style
Label {
font-weight:normal;
fontSize:14
}
Sascha Wolter | http://www.wolter.biz
Styles
ƒ
Selector Typ:
ƒ
Global
global {
themeColor:#A65904
color:#484848;
}
ƒ
Komponenten-Typ
Button {
color:#484848;
fontWeight:normal
}
ƒ
Instanz
.myButton {
color:#484848;
fontWeight:normal
}
Sascha Wolter | http://www.wolter.biz
Designer und Developer Workflow
STILLE POST
Sascha Wolter | http://www.wolter.biz
Designer und Developer Workflow
4) Design Optimierungen
Developer
Design Produktion
(z. B. Thermo)
Visual Designer
3) Development
Sascha Wolter | http://www.wolter.biz
Flash Player: AVM1 vs. AVM2
“Classic”
AVM1
AVM2
Virtual Machine
“Classic”
Flash Player API
AS3
Flash Player API
Flash Player Capabilities
(Networking, Rendering, Text, Sound, etc.)
Browser / Operating System
Sascha Wolter | http://www.wolter.biz
MXML: Zur Kompilierzeit einbetten
•
Einbetten:
<mx:Image source="@Embed('assets/images/flex_embed.swf')" />
•
Nachteil:
–
•
Vorteil:
–
–
•
Code geht verloren (bei ActionScript 2);
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')" />
Sascha Wolter | http://www.wolter.biz
MXML: Zur Laufzeit Laden
• Laden:
<mx:SWFLoader
source="assets/images/flex_reference.swf" />
• Nachteil:
– Kommunikation geht bei ActionScript 2 nur per
LocalConnection (AVM1/AVM2);
• Vorteil:
– Kommunikation geht bei ActionScript 3 per ActionScript
(AVM2/AVM2);
– Nur komplette SWF-Dateien;
• Syntax:
<mx:Image source="url" />
<mx:SWFLoader source="url" />
Sascha Wolter | http://www.wolter.biz
ActionScript: Zur Kompilierzeit
einbetten
•
Einbetten
package {
import flash.display.MovieClip;
[Embed(source="bee.swf",
symbol="bee")]
public class Bee
extends MovieClip {
public var stick:MovieClip;
}
}
•
Verwenden
mc = new Bee();
mc.stick.scaleX = 2;
mc.x = 100;
mc.y = 100;
addChild(mc);
Sascha Wolter | http://www.wolter.biz
•
Nachteil:
–
•
Code geht verloren (bei ActionScript 2);
Vorteil:
–
•
Instanznamen bleiben erhalten;
Syntax:
–
[Embed("asset.swf")]
class Name extends
DisplayObject
– [Embed("asset.swf")]
var Name:Class;
– Parameter:
source
mimeType
scaleGridTop
scaleGridBottom
scaleGridLeft
scaleGridRight
symbol
ActionScript: Zur Laufzeit Laden
•
Laden:
loader = new Loader();
loader.load(new URLRequest("bee.swf"));
addChild(loader);
•
Nachteil:
–
–
•
Vorteil:
–
•
Kommunikation geht bei ActionScript 2 nur per LocalConnection (AVM1/AVM2);
Nur komplette SWF-Dateien;
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
Skin Artwork
Sascha Wolter | http://www.wolter.biz
Designer und Developer Workflow
Flash
Dreamweaver Fireworks
Photoshop
ƒ
ƒ
Illustrator
Contribute
Flex
After Effects Premiere Pro
Bereitstellung für möglichst viele Formate und Plattformen
ƒ
Designer zu Designer
ƒ
Designer zu Entwickler
ƒ
Inhalts-Designer zu Inhaltskonsument
ƒ
Desktop zu Browser zu Endgerät
http://www.adobe.com/go/flex3_cs3_swfkit
Sascha Wolter | http://www.wolter.biz
CS3 und Flex
Import Skin Assets into Flex Builder
Create Flex Components in Flash CS3
CS3 templates make it easy to
create custom component skins
Flash developers can
easily package work
as Flex components
Import wizard generates code
assigning assets to components
MXML and CSS
Sascha Wolter | http://www.wolter.biz
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;
Sascha Wolter | http://www.wolter.biz
Bibliotheken und Themes
• Runtime CSS
– Compile CSS to SWF
– StyleManager.loadStyleDeclarations("theme.swf");
• 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
•
Extension Manager
– http://www.adobe.com/de/exchange/em_download/
– Packen
– Installieren
Sascha Wolter | http://www.wolter.biz
Erfahrungsberichte und Vergleich von Frameworks
ARCHITEKTUR
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, unittesting 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
Presumptions: Keep it simple
•
Business equals Games
– Think on charts as spaceships!
•
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
Frameworks
•
Selber machen
–
–
–
–
–
•
Events
Commands
Model
View
Controller
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
Cairngorm
•
Was ist Cairngorm?
–
–
•
Idee
–
–
•
Adobe: "The Cairngorm Microarchitecture is a lightweight yet prescriptive framework for
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.
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
Cairngorm
•
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
Cairngorm
•
Cairngorm bietet Entwurfsmuster
– Sammlung von allgemeinen Ansätzen (Entwurfsmustern), um typische
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
Cairngorm
Sascha Wolter | http://www.wolter.biz
Cairngorm
•
Download Cairngorm (und ältere Versionen):
– http://labs.adobe.com/wiki/index.php/Cairngorm
•
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/
68
Projektorganisation und Workflow
•
Mehrere Projekte
– Anwendung
– Bibliotheken
– Themes
•
Bibliotheken und Namensräume
– Manifest
•
Optimierung
– use-network
– debug
– optimize
Sascha Wolter | http://www.wolter.biz
ANT Build
•
•
•
•
flexTask.jar
build.xml
flex.properties
flex-config.xml
– dump-config filename.xml
– link-report filename.xml
Sascha Wolter | http://www.wolter.biz
Mehrsprachigkeit
•
Locale
– LocaleChain
– Property-Dateien
•
RessourceBundle
– <mx:Label text="@Resource(key='helloWorld', bundle='Application')" />
•
copylocale
– http://www.wolter.biz/?s=locale
– http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Runtim
e_Localization
•
StringUtil
– StringUtil.substitute(str, ...):String;
Sascha Wolter | http://www.wolter.biz
Mehrsprachigkeit
•
Per ActionScript
<mx:Metadata>[ResourceBundle("Application")]</mx:Metadata>
{resourceManager.getString('Application','helloWorldLabel')}
•
Typen
–
–
–
–
getString
getNumber, getInt
getBoolean
getClass
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
Fragen und Antworten aus der Praxis
AUF ZURUF
Sascha Wolter | http://www.wolter.biz
Sascha Wolter | http://www.wolter.biz
Danke für Ihre Geduld
Best Practices Rich Applications

Documentos relacionados