6.4. Zusammenhang Type-Mapping + Naming Conventions

Wie bereits im letzten Abschnitt aufgezeigt wird nur das Type-Mapping aufgerufen, welches dann selbst anhand des übergebenen Typs entscheidet, ob die Informationen der Type-Mapping-Datei ausgewertet werden müssen oder nicht. Im Folgenden nun ein Beispiel zur Generalisierung:

extends «generalization.first().mapName().asTypeName() -»

Hier wird nach dem Schlüsselwort extends die (erste) Basisklasse generiert. Diese Basisklasse kann vom Typ MClass oder auch vom Typ MExternal sein. Ist die Basisklasse vom Typ MClass ist es eine modellierte Klasse (des Domain-Modells) und muss daher den Naming Conventions unterworfen werden. Ist es ein MExternal, muss lediglich das Type-Mapping durchgeführt werden.

Um die Xpand-Templates nicht unnötig mit dem Test, um welchen Meta-Typ es sich handelt, zu verkomplizieren, wurden die Funktionen für die Namensgebung so definiert, dass sie diese Aufgabe erledigen. Die Funktion mapName() liefert bei Typen, bei denen kein Type-Mapping durchgeführt werden muss, den Typ unverändert wieder zurück (z.B. MClassifier, MGeneric). Wird bei MPrimitiveType oder MExternal ein Type-Mapping durchgeführt, liefert die Funktion einen String zurück.

Die Funktion asTypeName() für die Namensgebung erkennt am übergebenen Parameter (Typ oder String), ob das Type-Mapping durchgeführt wurde oder nicht. Wird ein String übergeben, wird dieser unverändert zurückgegeben, da das Type-Mapping den Typ bereits ermittelt hat. Wird ein Typ übergeben, werden die Naming Conventions angewandt und ein String zurückgegeben.

Somit werden auf elegante Weise beide Aspekte behandelt.