Keine Frage, dass es bei großen Projekten nicht empfehlenswert ist, Code und Design zu vermischen. Doch in der Praxis macht gerade diese Vorgehensweise bei kleineren Projekten Sinn, da so die Erstellung
- relativ einfach erlernt und
- alles von einer Person in
- einem Werkzeug umgesetzte werden kann.
Viele Sprachen wie HTML und Co. erlauben die Verknüpfung von Logik und Oberflächenbeschreibung in einer Datei. Ein gutes Beispiel für den Erfolg und die Gefahren dieser Vorgehensweise ist Flash. Denn Flash erfreut sich gerade dank dieser Vermischung einer recht steilen Lernkurve und erlaubt es auch Programm(ier)novizen, schnell zu Ergebnissen zu kommen. Doch wer hier nicht mit Disziplin vorgeht, findet seine Codeblöcke bei Problemen nur schwer in den zahlreichen Zeitleisten und Objekten wieder.
Softwarearchitekten wird es freuen, dass dieses Vorgehen in Silverlight nicht möglich ist und eine klare Trennung von Code und Design erzwungen wird. Denn Silverlight nutzt anstelle von Code-Inside Code-Behind. D. h. die Logik (z. B. C#) wird nicht mit der Oberflächenbeschreibung (XAML) vermischt sondern in eigenen Klassen platziert (partial classes) – anders als übrigens in WPF mit dem eigens dafür vorhandenen code Tag:
1
2
3
4
5
6
7
8
9
| <Canvas xmlns...>
<Button Name="button1" Click="Clicked">Click Me!</Button>
<x:Code><![CDATA[
void Clicked(object sender, RoutedEventArgs e)
{
button1.Content = "Hello World";
}
]]></x:Code>
</Canvas> |
So schön das in der Theorie klingt, führt diese Aufteilung in der Praxis zu einer flacheren Lernkurve und Erschwert die Erstellung durch eine Person mit einem Werkzeug. Nur wer sowohl Expression Blend für das Design als auch Visual Studio für den Code sein eigen nennt und zusätzlich auch beherrscht, kommt in annehmbarer Zeit ohne weitere Unterstützung zu guten Ergebnissen.
Doch Abhilfe sollte in Silverlight möglich sein. Die Unterstützung von dynamischen Sprachen ließe sich kombiniert mit einer entsprechenden Erweiterung in XAML durchaus dazu nutzen, sollte Microsoft nicht selber nachbessern (wie gesagt, in WPF ist das ja bereits enthalten). Diese XAML-Erweiterung müsste nur den mit ihr verbundenen dynamischen Code interpretieren und ausführen. Bereits vorhanden bzw. angekündigt sind Codebibliotheken für Iron Ruby, Iron Python, Visual Basic Script und JavaScript. Einzig die Integration in XAML fehlt noch.
Silverlight verfügt über eine Teilmenge der Funktionalität aus dem .Net-Framework. Dazu zählt auch die weitegehende aber nicht komplette Unterstützung von WPF (Windows Presentation Foundation). Anfänglich wurde Silverlight auch als WPF/E für Windows Presentation Foundation Everywhere bezeichnet.
Benutzeroberflächen und Animationen für WPF und Silverlight werden meist mit einer XML-basierten Sprache namens XAML beschrieben. XAML (eXtensible Application Markup Language) ähnelt entfernt der von Adobe in Flex genutzten Beschreibungssprache MXML (in Flash gibt es bisher keine vergleichbare deklarative Sprache) und dem in der Mozilla Foundation beliebten XUL (XML User Interface Language). Die XAML-Elemente stehen für Bestandteile aus dem .Net-Framework und können so auch imperativ in einer der .Net-Sprachen Programmiert werden. Eine deklarative Sprache wie XAML lässt sich aber meist einfacher Lesen und visuell Bearbeiten als vergleichbarer Programmcode in Visual Basic oder Visual C#. XAML wird direkt vom Compiler in Code für die Laufzeitumgebung verwandelt oder ggf. erst zur Laufzeit interpretiert.
Als Werkzeuge für die Gestaltung und Erstellung von XAML bietet sich das Illustrationswerkzeug Expression Design an. Für Animationen, den visuellen Entwurf von Benutzeroberflächen und kleinere Arbeiten direkt im XAML-Code kommt Expression Blend zum Einsatz. Die Codebearbeitung gelingt dank Codehilfen und Autovervollständigung (IntelliSense) am einfachsten mit Visual Studio, dem jedoch leider ein visueller Editor fehlt. Sehr hilfreich ist hier, dass sich Blend und Visual Studio das gleiche Projektformat teilen und es sich so zur gleichen Zeit an den gleichen Projekten und sogar den gleichen Dokumenten arbeiten lässt: Design und Animation erfolgen dann in Blend und die Programmierung in Visual Studio.
Aber auch ohne Microsoft steht der Gestaltung von XAML nichts im Wege. Einige Fremdanbieter haben bereits passende Produkte im Portfolio, wobei die meisten leider noch auf WPF ausgelegt und nicht für Silverlight optimiert sind. Hier ist eine unvollständige Liste; Eine umfangreichere Sammlung hat Mike Swanson in seinem Blog zusammengetragen.
Deep Exploration: Deep Exploration konvertiert gut 40 2D- und 3D-Formate inkl. XAML in alle Richtungen.
Fireworks to XAML Exporter: Dieser Exporter für Fireworks erlaubt es direkt aus der Anwendung heraus, Dokumente als XAML zu speichern.
Illustrator to XAML Export: Dieses Plug-in für den Adobe Illustrator ermöglicht den Export für WPF und für Silverlight.
Spket IDE: Spket IDE ist ein JavaScript- und XML-Editor, der auch Silverlight versteht und eine Code-Vervollständigung dafür bietet.
Swift 3D: Der aus der Flash Welt bekannte einfach gehaltene 3D-Modellierer speichert Inhalte auch als XAML für WPF und Silverlight.
Zam 3D: Dieses Produkt aus dem gleichen Hause wie Swift 3D ist für den Umgang mit XAML für WPF und Silverlight optimiert und eignet sich ebenfalls als Konverter für andere 3D-Formate.
Für die Produktion von Silverlight ist eine Umfangreiche Werkzeugpalette verfügbar. Mit Expression Blend lassen sich auch ohne größere Vorkenntnisse mal eben schnell ein paar Animationen und Benutzeroberflächen für Silverlight erstellen – sowohl in einem visuellen Modus als auch in der zugehörigen XML basierten Beschreibungssprache XAML (eXtensible Application Markup Language). Doch so ganz ohne Programmierung geht es dann doch nicht. Hier kommt Visual Studio mit seiner Vielzahl an Sprachen zum Einsatz – am gängigsten sind Visual Basic und Visual C#. Zur Darstellung wird Silverlight als Laufzeitumgebung benötigt. Für Puristen, die auf die Komfortfunktionen der aufgezählten Werkzeuge verzichten möchten, reichen als Minimalanforderung bereits das Silverlight SDK und ein einfacher Texteditor.
Auch wenn der Vergleich mit der Flash Welt hinkt, ist er zur Orientierung doch nützlich. Expression Blend erinnert dank Zeitleiste und rudimentärer Gestaltungsfunktionen am ehesten an die Flash Entwicklungsumgebung. Visual Studio ist das Pendant zum Flex Builder und das eigentliche Silverlight entspricht dem Flash Player. Aber spätestens hier wird klar, dass trotz vieler Ähnlichkeiten auch massive Unterschiede existieren. Flash und Flex sind zwar harmonische Teamplayer aber doch eher zwei alternative Wege zur Flash basierten Webanwendung. Blend und Visual Studio hingegen kommen meist nur gemeinsam zum Einsatz. Schlecht an dieser Zwangsehe ist die anfänglich flachere Lernkurve – gerade für kleinere Projekte und Designer ein Hindernis. Gut hingegen ist die klare Trennung zwischen Design und Programmierung – sicherlich ein Vorteil für größere Projekte und Entwickler.
Am schnellsten gelangt man mit Deep Zoom Composer zur ersten Silverlight-Anwendung: Einfach ein paar Bilder importieren, arrangieren und fertig ist die erste Website a la Hard Rock Memorabilia. Eine ähnliche Technologie für Flash-Anwedungen gibt es eigenständig oder als Bestandteil von Photoshop CS3 unter der Bezeichnung Zoomify. Einen interessanten Vergleich von Deep Zoom, Google Maps und Zoomify hat Jon Galloway in seinem Blog veröffentlicht.
Es ist geschafft: Nach knapp 10 Tagen Reisestress bin ich wieder zu Hause bei der Familie angekommen. Start der Tour war die Orbit in Zürich. Eine eher kleine und recht technische Messe, auf deren Konferenzteil Microsoft Evangelist Sascha Corti und ich einen „Shootout“ zu Silverlight und Flash machen durften.
Anschließend ging es direkt zu unserer eigenen Konferenz nach Köln. Fast 450 Besucher tummelten sich in zahlreichen Workshops und Vorträgen zu Themen rund um das Web. Die Kombination von Fachwissen und Inspiration gepaart mit einer freundschaftlichen Atmosphäre gibt es in dieser Form auf keiner anderen Veranstaltung. Erste Eindrücke und Bilder sind bereits im Web zu finden.
Den Abschluss der Tour bildete ein dreistündiger Workshop zum Thema Flex auf der Webinale in Karlsruhe. Das Feedback der Teilnehmer war sehr gut und so freut es mich, dass ich hier die Folien zu diesem Workshop zum Download als PDF anbieten kann.
Seit gut 10 Jahren beschäftige ich mich mit Rich Applications (oder wie es am Anfang hieß: Multimedia). Und weder der Name noch die Werkzeuge sind gleich geblieben. Dank Director und Flash durfte ich mich bis zur „Verschmelzung“ von Macromedia und Adobe zumindest mit dem gleichen Unternehmen auseinandersetzen. Das war auch schon das einzig Konstante. Sogar innerhalb der einzelnen Produkte haben sich fundamentale Konzepte bis hin zu ganzen Programmiersprachen stetig verändert.
Nun steht mit Microsofts Silverlight erneut eine große Veränderung für Anwendungsentwickler an, die ich miterleben möchte. Warum auch nicht? Klar, Silverlight ist zumindest in der aktuell ersten Version noch ein ganzes Stück hinter dem Marktführer Flash zurück, aber meine ersten Experimente mit dem Nachfolger Silverlight 2, dem Autorensystem Expression Blend 2.5 und der mächtigen Entwicklungsumgebung Visual Studio 2008 sind vielversprechend. Wenn ich das mit meinen ersten Erlebnissen in der Flash Welt vergleiche – damals ebenfalls in Version zwei –, dann hat Microsoft bereits jetzt einen beachtlichen Entwicklungsstand erreicht (es ist ja auch einfacher, wenn man nicht auf der grünen Wiese loslegen muss).
Natürlich arbeite ich weiterhin mit AIR, Flash und Flex. Schließlich handelt es sich um gute Produkte, deren Erfolg unbestritten ist. Doch bei der Entscheidung für eine der verfügbaren Technoligen geht es immer weniger alleine um die technischen Vor- und Nachteile der ohnehin durch die Bank sehr mächtigen Laufzeitumgebungen. Vielmehr gewinnen die Integration in eine bestehende Infrastruktur und die verfügbaren Entwicklerkapazitäten immer mehr an Bedeutung. Microsoft verfügt hier über ein umfangreiches Partnernetzwerk und eine große Entwicklergemeinde. Auch deshalb wird ein beträchtlicher Teil des Kuchens zukünftig an Silverlight und Co. gehen. Ein Grund mehr, sich damit zu beschäftigen!