Ajax-Framework mit Fokus auf grafische Benutzeroberflächen: Qooxdoo
Die Open-Source-Software Qooxdoo bietet nicht nur zahlreiche praktische
Lösungen, sondern auch eine technologische Basis für eigene Anwendungen
ambitionierter Softwareentwickler. Die Demonstration [1] auf der Website von Qooxdoo bietet Interessierten einen guten Einstieg, um das freie JavaScript-Framework eingehend unter die Lupe zu nehmen.
Framework, GUI-Toolkit, Ajax-Schnittstelle
Qooxdoo unterstützt die Erstellung komplexer Webanwendungen mit dem von klassischen Desktopapplikationen gewohnten Look-and-Feel. Anders als andere Frameworks beschränkt es sich nicht nur auf browserunabhängige DOM-, Event- oder Ajax-Schnittstellen, sondern legt darüber hinaus großen Wert auf ein einheitliches integriertes Widget-System. Beispiele dafür sind die durchgängige Bedienbarkeit per Tastatur, ausgefeiltes Fokusmanagement, Drag & Drop sowie die einfache Erstellung von Themes für komplette Anwendungen.
Das Programmierkonzept von Qooxdoo sieht vor, den Client weitgehend unabhängig vom Server in JavaScript zu entwickeln. Um eine professionelle Entwicklung von JavaScript-basierten Anwendungen zu ermöglichen, ist das Framework daher vollständig klassen- und objektorientiert. Es implementiert auf Basis von JavaScript auch höhere Features von Objektorientierung wie Interfaces und Mixins, verwendet Namespaces zur Organisation der Klassen und verzichtet darauf, native JavaScript-Typen zu erweitern. Den Entwicklungsprozess unterstützt Qooxdoo durch einen integrierten JavaScript-Linker und -Optimierer, der alle von der Anwendung verwendeten Klassen in korrekter Reihenfolge zu einer JavaScript-Datei zusammenfasst. Bei der Optimierung werden die Dateigröße minimiert, die Laufzeit verbessert und die Lesbarkeit erschwert (Obfuscation), was bei kommerziellen Angeboten und aus Sicherheitsgründen wichtig sein kann. Ein integrierter API-Viewer zeigt alle Qooxdoo-Klassen und auch die API-Dokumentation von Anwendungscodes an.
Ein wichtiges Merkmal von Qooxdoo: Es verwendet für die Gestaltung der Oberflächen nur JavaScript, DOM und CSS. Es werden keinerlei Plugins wie ActiveX, Java, Flash oder Silverlight vorausgesetzt. Unterstützt werden alle zurzeit gängigen Browser wie Internet Explorer, Firefox, Opera sowie der neue Safari 3. Qooxdoo abstrahiert die nativen DOM- und CSS-Schichten des Browsers und gleicht so die Vielzahl der Browser-Inkompatibilitäten aus. Der Programmierer kommt aus diesem Grund nur noch mit den höheren Programmierschnittstellen in Berührung und benötigt für die Benutzung von Qooxdoo daher weder HTML- noch CSS-Kenntnisse.
Bei Desktop- oder GUI-Anwendungen hat sich eine einheitliche grafische Formensprache herausgebildet, die programmiertechnisch mit Hilfe von Widgets realisiert wird. Qooxdoo bietet hierfür in seinem Toolkit verschiedene Menü- oder Dialogfenster, Schaltflächen, Radio-Buttons, Check-Boxen, Beschriftungen, Eingabefelder, Listen- oder Baumansichten und vieles mehr.
Die in der GUI-Programmierung üblichen Widgets wurden mit Hilfe von
JavaScript und DOM für den Webbrowser realisiert. Die Ähnlichkeit zu
klassischen GUI-Toolkits wie QT, Swing oder MFC besteht auch auf der
Programmierebene. Die Anwendungen werden aus Widgets zusammengestellt
und mit Hilfe von Events gesteuert. Layout-Manager sorgen für die
korrekte Platzierung der Widgets und ermöglichen flexible Layouts, die
sich zum Beispiel an die Größe des aktuellen Browserfensters anpassen.
Unterstützt werden Tastatur- und Maus-Navigation sowie
Drag-&-Drop-Funktionen. Das Erscheinungsbild der Anwendung – Farben,
Rahmen, Schriften, Symbole usw. – wird über so genannte „Themes“
festgelegt. Themes sind in einem deklarativen Stil ähnlich zu CSS
definiert, so dass nicht nur Programmierer, sondern auch Designer diese gestalten können.
Qooxdoo ist als reines Client-Framework nicht an eine bestimmte
Servertechnologie gebunden und wird in Projekten mit Java-,
PHP-, Perl-, Ruby-, Python- und .Net-Backends eingesetzt. Die mitgelieferten
RPC-Server für Java, PHP und Perl ermöglichen einen einfachen Aufruf von
Funktionen auf dem Server.
Community
Über die öffentliche Qooxdoo-Mailingliste werden
aktuelle und zukünftige Entwicklungen von der Community diskutiert, Bugs gemeldet oder
Fragen von Einsteigern und Fortgeschrittenen beantwortet. Im
Wiki-Bereich der Homepage kann jedermann zur Dokumentation des
Frameworks beitragen. Auch das Bug-Tracking und die Quelltexte in der
Versionsverwaltung sind öffentlich zugänglich. Benutzer rund um den
Globus haben einen wesentlichen Teil zur Stabilität und Ausgereiftheit
des Frameworks beigetragen.
Anwendungsbeispiele
Aufgrund seiner Ausrichtung auf desktopähnliche Anwendungen eignet sich Qooxdoo gut für webbasierte Intranetanwendungen, die früher vielleicht mit Delphi oder VisualBasic erstellt worden wären. Da ein Teil der Rechenlast auf den Client ausgelagert werden kann, ist eine hohe Skalierbarkeit von Qooxdoo-Anwendungen möglich. Das Framework kann daher problemlos auch auf öffentlichen Websites mit sehr hohem Traffic eingesetzt werden. Ein Beispiel dafür ist der neue GMX-Webmailer. Dieser erinnert in seiner jetzigen Form viel mehr an Desktopanwendungen wie Outlook als sein Vorgänger. Er ist clientseitig vollständig mit Qooxdoo realisiert und demonstriert sehr gut das Potenzial des Frameworks.
Neben reinen Anwendungen, die mit Qooxdoo erzeugt werden, gibt es auch Projekte, die auf dem Widget-System von Qooxdoo aufsetzen, um eigene Programmiermodelle zu realisieren. Innerhalb der Rich-Ajax-Platform (RAP) der Eclipse-Foundation wird Qooxdoo als Rendering-Engine für die Implementierung des RAP-Widget-Toolkit realisiert. RAP kombiniert das Entwicklungsmodell von Eclipse mit der Welt der Ajax-Anwendungen. RAP-Anwendungen werden in Java gegen eine Teilmenge der Standard-Widget-Toolkit-Schnittstelle programmiert und laufen vollständig auf dem Server. Eine generische JavaScript-Schicht im Client erstellt beziehungsweise modifiziert auf Anfrage des Servers dynamisch Qooxdoo-Widgets und leitet Events an den Server weiter.
Ausblick
Schon in der aktuellen Version 0.7.1 ist Qooxdoo für den produktiven Einsatz geeignet, dennoch gibt es einige Dinge, die bis zur Version 1.0 noch verbessert und erweitert werden sollen. Als nächster Schritt steht die Überarbeitung des Layout-Managers an, um eine bessere Anpassung der Widget-Themes an und eine bessere Integration von Qooxdoo-Widgets in „normale“ Webseiten zu ermöglichen. Außerdem soll der Code, der auf unterster Ebene für die Abstraktion der Browser-Inkompatibilitäten zuständig ist, besser vom Widget-System entkoppelt werden. Somit könnte Qooxdoo auch ohne Widgets auf einfachen Webseiten eingesetzt werden, um etwa die Funktionalitäten abzudecken, die Frameworks wie Jquery oder Prototype heute bieten.