08.12.2012 Aufrufe

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

typspezifische Dateneingabe zuständig ist 74 . Sie bestimmt in Abhängigkeit des Typs des<br />

Publikationsobjekts, das dem Formular zugrunde liegt (@publication) , das erforderliche<br />

Partial und lässt es über eine render-Anweisung in das Haupt-Template einbinden. Hier<br />

wird ersichtlich, wie ein Template auf Daten zugreifen kann, die im Controller definiert<br />

wurden: In der Controller-Action, die das Template als Request-Antwort bestimmt hat, wurde<br />

die Instanzvariable @publication mit einem Publikations-Objekt gesetzt – entweder mit<br />

einer aus der Datenbank gelesenen Publikation, die über das Formular editiert werden soll,<br />

oder einem neuen, noch leeren Objekt (wenn dem PVS über das Formular eine neue<br />

Publikation hinzugefügt werden soll). Auf diese Instanzvariable kann das Template nun<br />

zugreifen und in unserem Falle den Publikationstyp extrahieren, für den passende<br />

Eingabefelder bereitgestellt werden sollen.<br />

7.3.4 Umsetzung der RIA-Modellierung<br />

Die RIA-Modellierung für das PVS umfasste einerseits die Beschreibung zahlreicher RIA-<br />

Features durch Zustandsmaschinen («concreteRIAFeature»s), andererseits die<br />

Markierung von Prozesslinks als asynchronous, um asynchrone HTTP-Requests zur<br />

Durchführung von serverseitigen Prozessen zu modellieren. Dieses Kapitel ist der<br />

Realisierung beider Aspekte der RIA-Modellierung gewidmet. Zuvor jedoch zwei allgemeine<br />

Bemerkungen zur Vorgehensweise bei der Implementierung der RIA-Features: Erstens wurde<br />

JavaScript-Code, so weit es möglich war, in JavaScript-Dateien ausgelagert, um die<br />

Templates 'sauber' zu halten. Diese js-Dateien werden je nach Bedarf in diejenigen Templates<br />

eingebunden, in die eines oder mehrere in der Datei definierten RIA-Features integriert<br />

werden sollen. Zweitens wurde ein relativ hoher Grad an Abwärtskompatibilität realisiert, um<br />

das PVS auch für Benutzer verwendbar zu machen, die JavaScript in ihrem Browser<br />

deaktiviert haben und damit auf RIA-Features verzichten müssen (bzw. wollen). Immer dann,<br />

wenn durch ein Feature essentielle Funktionalität zur Verfügung gestellt wird, ohne die<br />

zentrale Anwendungsfälle des PVS nicht durchgeführt werden können, wurde zusätzlich eine<br />

Alternativlösung implementiert, über die die benötigte Funktionalität auch ohne JavaScript in<br />

Anspruch genommen werden kann. Nur um ein einfaches Beispiel zu nennen: Der Login-<br />

Mechanismus des PVS wird primär über einen AJAX-Request realisiert. Für Browser ohne<br />

JavaScript-Unterstützung wird das Absenden des Login-Formulars jedoch 'altmodisch'<br />

synchron durchgeführt.<br />

Die Umsetzung der RIA-Zustandsmaschinen in knapper und allgemeiner Form zu<br />

beschreiben, fällt nicht ganz leicht, da jedes RIA-Pattern Charakteristika besitzt, die sie von<br />

anderen Patterns unterscheidet und bei der Implementierung berücksichtigt werden müssen.<br />

Die Grundstruktur der Implementierung kann jedoch im Wesentlichen anhand des in<br />

Abschnitt 2.3.2 dargelegten, typischen Aufbaus eines RIA-Patterns nachvollzogen werden.<br />

Die Interaktion des Benutzers, durch die ein RIA-Feature ausgelöst wird, wird durch ein<br />

DOM-Event-Objekt erfasst, welches seinerseits einen für dieses Ereignis registrierten<br />

Eventhandler aktiviert. Der Handler ist eine JavaScript-Funktion, welche in der Regel für den<br />

zweiten Bestandteil des allgemeinen RIA-Musters verantwortlich zeichnet, nämlich die als<br />

Reaktion auf die Benutzeraktivität auszuführende Operation. Diese wird häufig, wie z.B. bei<br />

vielen Live Validierungen, vollständig auf Clientseite durchgeführt. Manchmal werden zur<br />

Durchführung der Operation jedoch Daten benötigt, auf die nur der Server Zugriff hat (wie<br />

74 Die Implementierung dieser Methode erfolgte in einem sogenannten Helper-Modul. Komplexere Ruby-<br />

Anweisungen, die in einem Template benötigt werden, werden als Methoden in solche Module ausgelagert,<br />

um den Code eines Templates zu verschlanken und weitestgehend frei von Programmierlogik zu halten. Im<br />

Template selbst erfolgt dann nur noch der Aufruf einer solchen ausgelagerten Methode.<br />

89

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!