Wir betrachten den Ablauf einer typischen Sitzung bei der ein Benutzer sich
das aktuelle Angebot im Shopmodus betrachtet.
Das Angebot ist in Kategorien aufgeteilt. Kategorien können andere Kategorien
enthalten oder auf andere Kategorien verweisen. Kategorien können Tickets
und/oder Bundles enthalten. Ein Bundle besteht aus mehreren Tickets.
Vergleiche: die Anforderungsdefinition
statisches Modell
In diesem Szenario haben wir folgende Objekte identifiziert:
siehe dazu das Klassendiagramm
Funktionen der einzelnen Klassen:
Webserver
Der Webserver nimmt die Anmeldung des Browsers entgegen und initialisiert für
diesen, unter Benutzung der SessionContextFactory, einen zugehörigen
SessionContext der die weitere Interaktion mit dem Browser übernimmt.
Der Zugriff des Browser auf den SessionContext erfolgt über
den WebServer.
Interface Viewable
Klassen die dieses Interface implementieren verfügen über eine
visuelle Darstellung können also im Browser dargestellt werden.
Viewable's werden eindeutig durch eine ViewableID identifiziert.
Die Daten der Viewables werden in einer Datenbank gehalten.
Interface ContainsSelectableViewables
diese Klassen enthalten anwählbare Viewable's. Wird solch eine Klasse im
Browser dargestellt kann der Benutzer eines der angezeigten Elemente
anwählen. Daraufhin wird ein Ereignis ViewableSelected(ViewableID) an den registrierten Listener gesendet (i.A. an den Browser).
Interface SelectableViewableListener
diese Klassen werden von ContainsSelectableViewable darüber benachrichtigt, dass der Benutzer
ein Element angewählt hat.
Interface Buyable
Klassen die dieses Interface implementieren sind dafür vorgesehen in einen
Warenkorb gelegt zu werden.
Diese Klassen dienen zur Darstellung der Datenbankrepräsentation der konkreten
Objekte.
Ticket
ein Ticket hat einen beschreibenden Namen und einen Kaufpreis
Bundle
ein Bundle enthält mehrere Tickets, hat einen beschreibenden Namen und einen Kaufpreis
Category
eine Category(Rubrik) hat einen beschreibenden Namen und enthält beliebig viele Tickets oder Bundles. Eine Category kann beliebig viele Categories
enthalten oder auf solche verweisen. Dadurch können Sie hierarchisch angeordnet werden so dass der Benutzer baumartig
in Ihnen navigieren kann.
Category
Categories dienen zur logischen Organisation des Angebots. Sie können
hierarchisch angeordnet werden so dass der Benutzer baumartig in ihnen
navigieren kann.
SessionContext
Der SessionContext erzeugt unter Benutzung der ViewableFactory
die angefragten Objekte für den Browser. Einmal erzeugte Viewables werden gecacht. Beim Ende der Session
können Sie dann verworfen werden.
ViewableFactory
Die ViewableFactory besteht aus Factories für Tickets und Categories. Anhand der ViewableID kann die ViewableFactory
entscheiden an welche SubFactory Sie den Auftrag weiterleiten muss.
TicketFactory, CategoryFactory
Diese stehen mit einer Datenbank in Kontakt und können Tickets/Categories für die angeforderten ID's erzeugen
Die erzeugten Viewables werden mit den Daten aus der DB angereichert und zurückgeliefert.
dynamisches Modell
Der Ablauf der Sitzung läßt sich wie folgend beschreiben:
Der Benutzer meldet sich an
Der Browser übergibt Nutzername und Passwort an den Server.
Der Server initialisiert einen SessionContext für den Browser. Falls die Initialisierung wegen falschen Nutzernamens/Passwort
scheitert gibt es eine entsprechende Fehlermeldung. Der SessionContext wird dem Browser bekannt gemacht.
Der Browser erfragt die TopLevelCategory beim SessionContext und öffnet diese. Dabei muss er sich selbst
als ViewableSelectedListener bei der Category registrieren.
Der Benutzer navigiert im Angebot
Der Benutzer wählt eine SubCategory/Ticket aus.
Die Category sendet das Event ViewableSelected(ViewableID) an den Browser.
Der Browser erfragt das neue Viewable beim SessionContext.
Der SessionContext erfragt das neue Viewable bei der ViewableFactory
Die ViewableFactory erzeugt das Viewable und reicht es zurück.
Der Browser registriert sich ggfs. als Listener für das Viewable.