Die folgenden Zeilen beschreiben ein weiteres komplettes Anwendungsbeispiel, das in Zusammenarbeit mit
Alexander Heim (http://www.promadesign.com/) entstanden ist.
Es gibt einen Einblick über das Design von Software und beschäftigt sich mit den
Implementierungs-Details, die das vorliegende Framework angehen.
1. Einleitung
Ein Gästebuch ist wahrscheinlich die älteste Anwendung von dynamischen Webseiteninhalten,
die ich kennengerlernt habe, jedoch ist das Beispiel auch sehr umfassend und beinhaltet viele Design-
Paradigmen und Pattern. Das Gästebuch basiert auf einer MySQL-Datenbank für die Daten-
Speicherung, das Front- und Backend basiert auf dem hier dokumentierten und eingesetzten Framework.
Das Grafik-Design ist bewusst sehr schlicht gehalten, damit die Anwendung in jede beliebige Webseite
eingebunden werden kann und die eigentliche Funktion nicht zu sehr in den Hintergrund rücken
lässt.
Hinweis: Die hier eingesetzte Software-Entwurfs-Methode mit Hilfe von UML ist nur eine gekürzte
Form der sonst in der Industrie üblichen Form des Entwurfs. Weiterführende Literatur
dazu ist auf amazon.de
(Softwaretechnik von Johannes Siedersleben) erhältlich.
2. Anforderungen
Zu Beginn sollte der Entwickler zusammen mit dem Kunden - falls dies zwei unterschiedliche
Personen sind - die Anforderungen an die Software spezifizieren. Ist der Kunde der Entwickler selbst
ist es ebenso ratsam die Anforderungen an die Software zu dokumentieren. Üblicherweise werden
Anforderungen in sog. "functional requirements" und "non-functional requirements" gruppiert. Das
Software-Design soll sich hier durch folgende Punkte auszeichnen:
Functional Requirements
Anzeigen der Einträge mit Paging
Erstellen eines neuen Eintrags
Administration des Gästebuchs (Kommentieren, Editieren, LÖschen)
Einbindung per Tag in eine bestehende Oberfläche
Non-Functional Requirements
Möglichkeit mehrere Gästebücher mit einem Code betreiben
Modulerer Aufbau
Von der Anwendung getrenntes Datenhaltungs-Modell
Gute Performance
Der in der Liste genannte Pager ist ein weiteres mit dem Framework ausgeliefertes Modul im "modules"-
Namespace. Er ist eine fertig einsetzbare Business-Komponente, die nur noch für den Einsatzzweck
konfiguriert werden muss. Er unterstützt eine generische Schnittstelle zur Implementierung einer
eigenen Ausgabe-Logik. Für den aktuellen Anwendungsfall kann jedoch die bereits mitgelieferte
Ausgabe eingesetzt werden.
3. Anwendungsfälle
Eine weitere Form, die Anforderungen auf Basis von Rollen auszudrücken ist das "Use Case"-Diagramm.
Diese spiegeln die Interaktions-Punkte von Personen mit dem Systen wieder und gruppieren Funktionen.
Die hier gezeigten Diagramme wurden mit dem Enterprise Architect
erstellt, ein Entwurfs-Tool, mit dem der komplette Entwurfszyklus elektronisch in UML dokumentiert
werden kann. Ebenso ist Code-Generation aus bestehenden Klassen-Diagrammen in viele Programmiersprachen
(u.a. PHP) möglich.
Übersicht
Aktoren
Anwendungsfälle
4. Design der Business-Schicht / Datenmodell der Anwendung
Die Business-Schicht einer Anwendung beinhaltet die Definition der Workflows und der Definition der
Daten-Objekte. Da sich der/die Workflow/s im Gästebuch auf realtiv wenige Aktionen und Folgen
von Aktionen (Eintragen -> Speichern -> Weiterleitung auf Anzeige-/Auswahl-Seite) beschränkt,
sei hier mehr auf das Daten-Design eingegangen.
Die Autoren gehen davon aus, dass das folgende Datenmodell für alle Anwendungsfälle
ausreichend ist:
Alle für die Anwendung relevanten Objekte (Guestbook, Entry
und Comment) erben vom Basis-Objekt coreObject. Damit erben diese bereits
die generischen get()- und set()-Methoden. Die Objekte im Einzelnen:
Guestbook:
Das Objekt, dass das Gästebuch repräsentieren besitzt Attribute für die Darstellung
(Name, Description), Admin_Username und
Admin_Password für die Administration des Gästebuchs und das komplexe
Attribut Entries, das eine Liste von Entry-Objekten hält.
Entry:
Das Objekt Entry repräsentiert einen Eintrag in einem Gästebuch. Es sind
sowohl Attribute für die Darstellung als auch für die Sortierung enthalten. Zudem enthält
es das komplexe Attribut Comments in dem eine Liste von Kommentaren enthalten ist,
sofern Kommentare zu einem Eintrag hinzugefügt wurden.
Comment:
Das Objekt Comment trägt die Inhalte eines Kommentars, der an einen Gästebuch-
Eintrag gehängt wurde.
Hier das Objekt-Modell der Anwendung:
Das Diagramm beschreibt aktuell vier Komponenten, die implementiert werden müssen. Das sind je
ein DocumentController für die Ausgabe der Liste und einer für das Handling des Formulars,
eine Business- (guestbookManager) und eine Daten-Schicht-Komponente (guestbookMapper).
Der Manager kapselt den Workflow, der im Wesntlichen aus der Methode saveEntry() besteht.
5. Datenschicht und DataMapper
Wie bereits angesprochen differieren in der Regel das Datenmodell der Anwendung und das der Datenhaltung.
In diesem Fall wird ein normalisiertes Datenmodell in der dritten erweiterten dritten Normalform
eingesetzt. Das bedeutet, dass die Objekte jeweils in einer eigenen Tabelle gespeichert werden und die
Beziehungen (in diesem Beispiel nur Kompositionen) über Relations-Tabellen. Siehe auch
http://de.wikipedia.org/wiki/Normalisierung (Datenbank).
Das ergibt unter Berücksichtigung des obigen Anwendungs-Daten-Modells folgende Tabellen-Struktur:
Der DataMapper hat nun gemäß Pattern-Definition eines DataMappers die
Aufgabe zwischen dem Datenmodell der Datenhaltung und der Anwendung zu vermitteln. Dazu dienen
einerseits die Methoden __mapEntry2DomainObject(), __mapGuestbook2DomainObject()
und __mapComment2DomainObject(), mit denen die Result-Sets eines Datenbank-Queries in Objekte
überführt werden, andererseits loadGuestbookByID(), mit dem ein komplettes
Gästebuch incl. alles aktuell geforderten Einträge und Kommentare geladen werden kann.
Fortsetzung:
Das Design der Anwendung ist nun abgeschlossen. Seite 2 widmet sich
den Implementierungsdetails.
Kommentare
Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.