11.6. MDSD für das Dynamic Data Model (DDM)

Für das dynamische Datenmodell kann mit dem GeneSEZ PHP Platform Projekt eine PHP Datei mit DDM Definitionen generiert werden. Die in einem UML Modell enthaltenen Datentypen, Klassen, Attribute sowie Assoziationen werden auf Basis des DDM definiert.

11.6.1. Erstellung eines UML Modells

Für die Modellierung einer Anwendung die auf der Basis des DDM entwickelt werden soll gibt es ein UML Profil, welches in Abbildung Figure 11.2, “UML Profil für das DDM” dargestellt ist. Alle UML Klassen werden zu DDM Klassen und alle UML Datentypen werden zu DDM Typen. Attribute und Assoziationen werden analog abgebildet.

Figure 11.2. UML Profil für das DDM

UML Profil für das DDM

Das Profil stellt fünf Stereotypen bereit. Die Stereotypen type und class sind optional. Zur Definition eines DDM Typs ist jedoch einer der drei Basistypen erforderlich.

Dabei ist bewust keine Vererbungsbeziehung zwischen den Stereotypen type sowie den Stereotypen boolean, integer und string spezifiziert. Dies hat die folgenden Konsequenzen:

  • soll ein constraint für einen Typ angegeben werden muss zusätzlich der Stereotyp type zugewiesen werden

  • ist kein constraint erforderlich, kann auf den Stereotyp type verzichtet werden

  • Soll der Name des Datentyps als constraint verwendet werden, so muss lediglich der Stereotyp type zugewiesen werden, ohne einen Tagged Value für constraint anzugeben

Mit Vererbungsbeziehung müsste jedes nicht notwendige constraints explizit als leerer String modelliert werden.

11.6.2. Mapping von UML Datentypen auf DDM Typen

Der Stereotyp type ist bei der Abbildung von UML Datentypen auf DDM Typen optional, jedoch muss ein Stereotyp zur Angabe des Basistyps angegeben werden. Es werden die folgenden Eigenschaften berücksichtigt:

  • das Attribtue name eines DDM Typs ist durch den Namen des UML Datentyps gegeben

  • die description eines DDM Typs ist durch die Kommentare des UML Datentyps gegeben

  • das Attribut editable wird aus dem negierten Wert der UML Eigenschaft isLeaf gebildet. Im GeneSEZ Metamodell ist dieser Wert bereits negiert dem Attribut final zugewiesen

  • der basetype ergibt sich aus dem Namen des zugewiesenen Stereotypen: boolean, integer oder string

  • der Wert für constraint ergibt sich wie folgt:

    • ist der Stereotyp type nicht zugewiesen, ist der Wert ein leerer String

    • ist der Stereotyp type zugewiesen, aber kein Wert für den Tagged Value constraint vergeben, so wird der Name des UML Datentyps als Wert genutzt

    • ist der Stereotyp type zugewiesen sowie ein Tagged Value constraint vergeben, so wird der Wert des Tagged Values genutzt

Bei der Abbildung werden die auf die Werte von name und basetype noch Namenskonventionen angewendet die standardmäßig den Name mit einem Großbuchstaben beginnen lassen und den basetype komplett in Großbuchstaben konvertieren.

11.6.3. Mapping von UML Klassen auf DDM Klassen

Der Stereotyp class ist bei der Abbildung von UML Klassen auf DDM Klassen optional. Die Eigenschafen beider Konstrukte werden wie folgt aufeinander abgebildet:

  • das Attribtue name ist durch den Namen der UML Klasse gegeben

  • die description ist durch die Kommentare der UML Klasse gegeben

  • das Attribut editable wird aus dem negierten Wert der UML Eigenschaft isLeaf gebildet. Im GeneSEZ Metamodell ist dieser Wert bereits negiert dem Attribut final zugewiesen

  • als parent wird die erste Basisklasse genutzt

  • der Wert für view ergibt sich wie folgt:

    • ist der Stereotyp class nicht zugewiesen, wird der Name der UML Klasse genutzt

    • ist der Stereotyp class zugewiesen, aber kein Wert für den Tagged Value view vergeben, so wird der Name der UML Klasse genutzt

    • ist der Stereotyp class zugewiesen sowie ein Tagged Value view vergeben, so wird der Wert des Tagged Values genutzt

Bei der Abbildung werden auf die Werte von name und view noch Namenskonventionen angewandt die standardmäßig beide Werte mit einem Großbuchstaben beginnen lassen.

11.6.4. Mapping von UML Attribute auf DDM Attribute

Die Abbildung von UML Attributen auf DDM Attribute ist ohne zusätzliche Informationen möglich. Dabei werden die Informationen aus dem UML Modell wie folgt genutzt:

  • das Attribtue name ist durch den Namen des UML Attributes gegeben

  • die description ist durch die Kommentare des UML Attributes gegeben

  • das Attribut column ergibt sich wie folgt:

    • ist kein Standardwert des UML Attributes angegeben oder ist ein leerer String als Standardwert angegeben, so wird der Name des UML Attributes genutzt

    • ist ein Standardwert des UML Attributes angegeben der kein leerer String ist, wird dieser genutzt

  • als type wird der modellierte UML Datentyp genutzt

  • als class wird die modellierte UML Klasse genutzt

Bei der Abbildung werden auf die Werte name und view noch Namenskonventionen angewandt die standardmäßig beide Werte mit einem Großbuchstaben beginnen lassen.

11.6.5. Mapping von UML Assoziationen auf DDM Assoziationen

Die Abbildung von UML Assoziationen auf DDM Assoziationen ist ebenfalls ohne zusätzliche Informationen möglich. Dabei werden die Informationen des UML Modells wie folgt genutzt:

  • der name ist durch den Namen der UML Assoziation gegeben

  • die description ist durch die Kommentare der UML Assoziation gegeben

  • das erste von beiden Assoziationsenden wird die from Seite

  • die to Seite ist durch die UML Klasse gegeben welche als Typ des ersten Assoziationsendes gesetzt ist

  • die to cardinality wird aus der multiplicity des ersten Assoziationsendes gesetzt

  • die from cardinality wird aus der multiplicity der Gegenseite gesetzt, welche im GeneSEZ Metamodell als oppositeMultiplicity des ersten Assoziationsendes zugänglich ist

Auf den Wert von name wird noch eine Namenskonvention angewandt die den Wert mit einem Großbuchstaben beginnen lässt.

11.6.6. Workflow Definition

Bei der Uml2GeneSEZ Transformation sollte das GeneSEZ DDM UML Profil als Metamodell mit angegeben werden:

<component id="uml2genesez" class="de.genesez.platforms.common.workflow.Uml2GeneSEZ"> 
    <model value="<model name>" />
    <profile value="model/genesez.php.ddm.profile.uml" />
</component>

Zur Model-zu-Text Transformation kann ein PHP Generator genutzt werden, der das Template de::genesez::platforms::php::ddm::templates::Definition::Root ausführt:

<component id="model2php" class="de.genesez.platforms.php.workflow.PhpGenerator"> 
    <outputDir value="src-gen" /> 
    <template value="de::genesez::platforms::php::ddm::templates::Definition::Root" /> 
</component>

Danach wird im angegebenen Verzeichnis eine PHP Datei mit den DDM Definitionen erstellt. Standardmäßig ist diese ddm.definitions.php genannt.

Die Datei enthält am Anfang eine Protected Region um die Datenbankverbindung sowie Doctrine initialisieren zu können bevor mit der Erstellung des DDM Modells begonnen wird.