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.

Zur Vereinfachung soll angenommen werden, dass der Ablauf des Prozess komplett ohne<br />

weitere Benutzeraktivitäten auskommt – technisch formuliert: Die Aktivität, die den Prozess<br />

beschreibt, enthält keine «userAction»-Aktion. Ein typischer Anwendungsfall einer<br />

solchen Navigationsstruktur könnte z.B. in einem Online-Shop auftreten. In der Detail-<br />

Ansicht eines Produkts befindet sich u.a. eine Schaltfläche 'Zum Warenkorb hinzufügen'.<br />

Wird diese betätigt, so wird ein serverseitiger Prozess initiiert, der entsprechende<br />

Geschäftslogik ausführt (Hinzufügen des Produkts zum Inhalt des Warenkorbs, Aktualisierung<br />

des Gesamtpreises etc.) und abschließend, im Falle eines synchronen Aufrufs, die Detailseite<br />

des Produkts erneut an den Client sendet - diesmal allerdings mit einer Nachricht über den<br />

Erfolg des Prozesses und mit einer aktualisierten Warenkorbanzeige (Es soll angenommen<br />

werden, dass der Warenkorb des Benutzers in einer Sidebar angezeigt wird, die fest zum<br />

Layout des Online-Shops gehört, also auf jeder Seite des Online-Shops zu sehen ist.)<br />

Tatsächlich wäre es sinnvoll, wenn die Anwendung den Prozess nicht synchron, sondern<br />

asynchron aufrufen würde. Es ist nicht nötig, nach Abschluss der serverseitigen<br />

Aktualisierung des Modells die gesamte Detailseite neu zu laden – es genügt vollkommen,<br />

nur die Nachricht in die Seite einzufügen und die Warenkorb-Anzeige zu aktualisieren 56 . Wie<br />

sähe aber die Modellierung dieser asynchronen Variante mit <strong>UWE</strong> aus? Oder: Wie würde sie<br />

sich von der synchronen Variante unterscheiden?<br />

Es scheint wenig angebracht, den Unterschied zwischen den beiden Alternativen als ein RIA-<br />

Feature zu modellieren, dessen Verhalten durch einen Zustandsautomaten beschrieben wird.<br />

Tatsächlich geht es allein um zwei verschiedene Kommunikationsweisen mit dem Server. Und<br />

alles, was benötigt wird, um den Entwickler für die Umsetzung der gewünschten<br />

Funktionalität ausreichend zu instruieren, ist ein kurzer Hinweis, dass der entsprechende<br />

Prozess nicht wie üblich synchron, sondern eben asynchron aufgerufen werden soll.<br />

Es bietet sich an, diese Information direkt an den Prozesslink zu heften, der den Übergang von<br />

der Produkt-Detailansicht zum Prozess der Warenkorb-Aktualisierung repräsentiert. Dies<br />

kann mit Hilfe eines Tagged Values geschehen, dessen Wert die Art des Requests angibt. Dazu<br />

wird im <strong>UWE</strong>-Profil dem Modellelement «processLink» am einfachsten ein Metaattribut<br />

asynchronous vom Typ Boolean mit dem Defaultwert false hinzugefügt. Asynchron<br />

zu realisierende Prozessaufrufe kann der Modellierer dann einfach dadurch kennzeichnen,<br />

dass er den Wert dieses Tagged Values für den betreffenden Prozesslink auf true setzt.<br />

Auch im PVS findet sich ein Anwendungsfall dieses Szenarios: Der Login-Mechanismus des<br />

Systems wurde über einen asynchronen Serveraufruf realisiert.<br />

Abbildung 42: PVS-Navigationsmodell (Ausschnitt): Login<br />

Ein asynchroner Login-Request eignet sich hier vor allem deswegen, weil es die erfolgreiche<br />

Anmeldung eines Benutzers nicht erfordert, eine komplett neue Seite an den Client zu senden.<br />

Tatsächlich müssen nur einige UI-Komponenten aktualisiert werden, die zum festen<br />

Seitenlayout der Anwendung gehören (analog zur Warenkorb-Anzeige im vorherigen<br />

56 Ein Beispiel für eine solche Realisierung findet sich bei dem Online-Shop 'musicload' (www.musicload.de)<br />

71

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!