2012-03-28 12 views
1

Ich habe viele Domänenklassen in meiner Anwendung und für Audit-Protokollierung Ich brauche das Namensattribut jeder Domain-Klasse. Leider ist das name-Attribut nicht in allen Domains generisch.
In meiner Audt-Log-Klasse bekomme ich den Typ des Objekts geändert/erstellt/gelöscht und speichere die ID jetzt (das ist gängiger Code, da alle Domains das Attribut 'id' haben) aber jetzt, wenn ich das Namensattribut abfragen will der Domain von der ID hat jede Domain ein anderes Namensattribut, wie Resource Domain hat ResourceName, User Domain hat UserName und so weiter ... so muss ich jede Domain einzeln behandeln (wie eine Map oder eine Menge von Switch Statements für Abrufen des Namensattributs vom Domänenklassennamen).
Gibt es eine Möglichkeit, kann ich eine Alias-Zuordnung für jede Domain-Klasse Namensfeld namens "Name" haben. Es sollte keine Änderung an den tatsächlichen Attributen in den Domänen geben, egal welche Änderungen ich mache, ich kann eine Spalte zur Prüfdomäne hinzufügen, aber keine anderen Tabellenänderungen.
Dank im Voraus
können wir mehrere Aliase für ein Domänenklassenattribut haben in Grails

Antwort

2

Ich glaube nicht, dass es eine Möglichkeit gibt, dies automatisch zu tun.

Wie Sie vermuten, müssen Sie entweder alle Domänenobjekte so ändern, dass sie ein "name" -Attribut haben, oder irgendwie eine Karte verwalten, welches Attribut in jeder Klasse als "Name" betrachtet wird ".

Ich nehme an, dass eine Antwort sein könnte, eine Methode getName() zu jeder der Domänenklassen hinzuzufügen und den entsprechenden Wert von dieser Methode zurückzugeben.

Wenn Sie die Domänenobjekte überhaupt nicht ändern möchten, können Sie diese Methode mithilfe der Groovy Meta-Object Programming (MOP) in jede Domänenklasse aus der BootStrap-Klasse einfügen.

+0

Ich kann die getName-Funktion tun, die am elegantesten aussieht. Vielen Dank –

Verwandte Themen