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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Am Code für die entsprechende Action im Rails-Controller lässt sich gut erklären, welche der<br />

Informationen, die in obigem Modellausschnitt enthalten sind, plattformspezifisch in der<br />

Steuerungsschicht umgesetzt werden, und wie dies geschieht:<br />

1 def show_details<br />

2 @publication = Publication.find(params[:id])<br />

3 render(:template => 'publications/show_details')<br />

4 end<br />

Mit den Schlagwörtern def und end wird in Zeile 1 und 4 die Methodendeklaration eingeleitet<br />

bzw. beendet. Zeile 3 enthält einen abschließenden render-Befehl, mit dem die View<br />

angewiesen wird, das Template mit dem Namen 'show_details' im (View)-Ordner<br />

'publications' zu rendern und an den Client zu schicken. Wie bereits festgestellt, kennt Rails<br />

keine abstrakten Navigationsknoten – im Controller wird direkt mit den View-Templates<br />

gearbeitet, die ihre Entsprechung auf Modellebene in Elementen des Präsentationsmodells<br />

haben. In Zeile 2 wird eine Instanzvariable (@publication) mit dem Publikations-Objekt<br />

gesetzt, dessen Details angezeigt werden sollen. Dieses Objekt entspricht dem Eingabeobjekt,<br />

das der Zielknoten Publication über den Navigationslink von PublicationList<br />

erhält (d.h .dem Objekt, das an dem «index» ausgewählt wurde). Es muss mit Hilfe der<br />

Klassenmethode find der Modell-Klasse Publication explizit aus der Datenbank<br />

gelesen werden. Dazu bedient sich die Action der ID des betreffenden Publikationsobjekts,<br />

die aus der URL des HTTP-Requests extrahiert wurde und im params-Objekt zu finden ist,<br />

über das der Action die HTTP-Parameter der Anfrage zur Verfügung gestellt werden 71 . Das zu<br />

rendernde Template hat Zugriff auf die Instanzvariable @publication, somit kann das<br />

Template dynamisch mit den Daten der ausgewählten Publikation aufgefüllt werden. Hier<br />

wird wiederum ersichtlich, wie Rails ohne eine abstrakte Zwischenschicht auskommt, die bei<br />

<strong>UWE</strong> durch das Navigationsmodell gestellt wird: Während bei <strong>UWE</strong> Präsentationsgruppen<br />

einen Navigationsknoten als Kontext besitzen, der die Daten zur Verfügung stellt, welche von<br />

UI-Elementen der Gruppe angezeigt werden sollen, operieren Rails-Templates direkt auf<br />

Instanzen von Inhaltsmodell-Klassen. Damit beantwortet sich auch die Frage, an welcher<br />

Stelle einer Rails-Anwendung Navigationseigenschaften definiert werden: Genauso wie die<br />

sie besitzenden Navigationsklassen existieren solche Konstrukte dort nicht, stattdessen<br />

extrahiert die View die zur Anzeige bestimmten Daten direkt aus Modellobjekten.<br />

Viele der bis jetzt in diesem Abschnitt gemachten Erläuterungen treffen auch die<br />

Implementierung von Prozessklassen zu. Für einen einfach strukturierten Prozess wie z.B.<br />

EditPublication im PVS, dessen Workflow-Aktivität genau eine UserAction enthält<br />

(zur Repräsentation des <strong>Web</strong>formulars zur Angabe der Publikations-Daten), werden zwei<br />

Controller-Aktionen benötigt. Die, die (zeitlich) zuerst aufgerufen wird, ist dafür zuständig,<br />

das entsprechende Template zur Eingabe der Prozessdaten (also z.B. ein <strong>Web</strong>formular)<br />

festzulegen und der View zum Rendern zu übergeben. In einem Fall wie dem Editieren einer<br />

bereits bestehenden Publikation muss außerdem, ähnlich zum gerade diskutierten Beispiel,<br />

das zu editierende Objekt aus der Datenbank geladen und über eine Instanzvariable dem<br />

entsprechenden Template zugänglich gemacht werden, damit dort die Anfangswerte der<br />

Eingabefelder in Abhängigkeit von dem betreffenden Objekt festgelegt werden können. Wenn<br />

man die hier vorgeschlagene Übersetzungsregel 'Navigationslink – Controller-Action' auch<br />

auf Prozessklassen und deren Einbindung in das Navigationsmodell anwenden möchte, so<br />

71 Dieses Objekt besitzt eine Hash-Struktur, d.h. es speichert die Namen der HTTP-Parameter als Schlüssel und<br />

die Parameterwerte als Schlüsselwerte. Wie im Code-Beispiel ersichtlich, können die Werte über die<br />

entsprechenden Schlüssel abgerufen werden.<br />

84

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!