Online-Forum SMF
Ich verwende die Software Simple Machines Forum (kurz SMF) in Version 2.0 RC5. Bei der Installation wurde smf_ als Präfix für Tabellennamen angegeben. Somit heben sich die Tabellennamen besser von den Namen der Domänenobjekten ab, die manuell definiert werden. Die Software erzeugt bei der Erstellung 63 Tabellen. Somit macht es auch Sinn, von der Datenbankstruktur hin zum fachlichen Domänenmodell zu abstrahieren.
Anwendungsfälle in einem Online-Forum
Ein Online-Forum hat u.A. die folgenden Anwendungsfälle:

Der Anwendungsfall "Thema starten" sieht im Detail folgendermaßen aus:
Name | Thema starten |
Beschreibung | Der Benutzer startet ein neues Thema. |
Auslöser | Der Benutzer möchte ein neues Thema starten. |
Vorbedingungen |
|
Nachbedingung |
|
Standardablauf |
|
Groovy-DSL für die Vor- und Nachbedingungen
Eine DSL für die Formulierung von Vor- und Nachbedingungen sollte so gestaltet sein, dass sie der natürlichen Sprache, die im letzten Abschnitt zur Formulierung verwendet wurde, möglichst ähnlich ist. Die Vor- und Nachbedingungen aus dem letzten Abschnitt können folgendermaßen als gültiger Groovy-Code dargestellt werden:
//Vorbedingungen prüfe { Testbenutzer.istAngemeldet Testforum.existiert NeuesThema.existiertNicht } //Nachbedingungen prüfe { NeuesThema.existiert Testforum.Themen.enthält NeuesThema NeuesThema.Beiträge.anzahl = 1 NeuesThema.Beiträge.enthält NeuerBeitrag }
Definition von Testdaten
Die Begriffe existiert, existiertNicht, anzahl und enthält sind eingebaute Bestandteile der DSL, da sie für die meisten Vor- und Nachbedingungen gebraucht werden. Die Begriffe Testbenutzer, Testforum, NeuesThema, NeuerBeitrag und istAngemeldet müssen vom Benutzer definiert werden, da sie domänenspezifisch sind. Die Definitionen sehen folgendermaßen aus:
definiere Testbenutzer { istEin Benutzer mit { Nickname = "Testbenutzer" } } definiere Testforum { istEin Forum mit { Name = "Testforum" } } definiere NeuesThema { istEin Thema mit { Titel = "Testthema" } } definiere NeuerBeitrag { istEin Beitrag mit { Titel = "Testthema" Text = "Testtext" } }
Das Schlüsselwort definiere erzeugt ein neues Domänenobjekt in der Domäne. Mit istEin legt man fest auf welchen Domänenobjekt das zu erstellende basieren soll. Dabei werden alle Eigenschaften des Basisobjektes vererbt und sind im neuen verfügbar. Mit dem Schlüsselwort mit kann man Constraints für das neue Domainobjekt festlegen. Im Beispiel NeuerBeitrag wird z.B. festgelegt, dass der Titel "Testthema" und der Text "Testtext" sein muss.
Definition von Domänenobjekten
Was Benutzer, Forum, Thema und Beitrag sind muss ebenfalls definiert werden. Das ist je nach verwendeter Foren-Software anders. Bei dem verwendeten SMF-Forum kann man einen Beitrag beispielsweise folgendermaßen definieren:
definiere Beitrag { istEin smf_messages definiereEigenschaft Titel { istEigenschaft smf_messages.subject } definiereEigenschaft Text { istEigenschaft smf_messages.body } }
Mit dem Schlüsselwort definiereEigenschaft legt man neue Eigenschaften für das Domänenobjekt fest. Diese können später z.B. in Constraints verwendet werden. In den meisten Fällen basiert die neue Eigenschaft auf vererbten Eigenschaft des Basisobjektes. Das wird durch das Schlüsselwort istEigenschaft festgelegt.
smf_messages ist eine Datenbanktabelle. subject und body sind Spalten dieser Tabelle. In der zu erstellenden Software ist smf_messages ebenfalls ein Domänenobjekt. Dieses Objekt wird von Software automatisch erstellt. Die Software erstellt für jede Tabelle mit all ihren Spalten jeweils genau ein Domänenobjekt. Diese Domänenobjekte bilden die Basis für alle benutzerdefinierten Domänenobjekte. Dadurch wird es möglich SQL-Queries zu generieren und die Vor- und Nachbedingungen überprüfen zu lassen.
Keine Kommentare:
Kommentar veröffentlichen