Frage

So wir einzigartige ‚Codes‘ haben für einige unserer grails Objekte (ref Daten), und wenn wir sie abrufen möchten, wir tun dies, indem sie mit ihren statischen Code-Aufruf:

Currency.findByCode(Currency.DOLLAR)

Vielleicht bin ich völlig falsch, aber dies scheint wie eine sehr ausführliche und nicht-groovy Art und Weise Objekte des Abrufens (besonders wenn man es mehrmals zu tun, für mehrere Objekte).

Gibt es ein akzeptierter Ansatz (mit vielleicht einen Verweis auf das Objekt selbst irgendwo)? Wenn dies der beste Weg, es zu tun ist, dass eine akzeptable Antwort. Danke.

War es hilfreich?

Lösung

Es hängt davon ab. Dies scheint, wie Referenzdaten. Wenn die Referenzdaten nie ändern ist, würde ich nicht die Persistenz-Schicht überhaupt verwenden. - Ich würde eine Reihe von statischen Variablen Code auf, der die statischen Referenzdaten sind

Wenn Sie in der Lage sein möchten, Ihre Referenzdaten ohne Erneutes Bereitstellen zu ändern, der praktischste Weg, wäre sie von der DB zu laden. Sie würden eine Art von Admin-Bildschirm, wo Sie die Daten manipulieren können. Sie würden 2. Level-Cache wie ehcache zu Limit verwenden, wie viel die Persistenz-Schicht tatsächlich traf die db - Sie können auf diese Weise wirklich gute Leistung. Siehe Abschnitt 5.5.2.2 des Benutzerhandbuchs.

Doch mit Ihrem aktuellen Ansatz, den Sie zu redeploy auf einer Änderung in Ihren Referenzdaten, weil die Currency.DOLLAR Notwendigkeit zu codierenden haben würden. Es wäre wahrscheinlich schön, nicht das zu tun.

Andere Tipps

Eine andere Sache, dass Sie den Code verkürzen könnten tun, wenn Sie statische Variablen verwenden statische Importe verwenden (dies tatsächlich einen Teil von Java, aber ich fand es nicht, bis ich groovy bewegte):

Wenn Sie einen statischen Import von CurrencyType (potentiell eine Enumeration, die verschiedenen Arten von Währungs halten, dass Sie definiert haben) an der Spitze der Klasse:

static import com.example.CurrencyType.*

Unten im Code, die Sie nicht mehr benötigen alle Referenzen mit CurrencyType Präfix, können Sie einfach tun:

Currency.findByCode(DOLLAR)

Wenn sie nicht zu ändern brauchen, könnten Sie auch eine Hilfsmethode in Ihre Währung Klasse hinzufügen, um es abzurufen:

Currency.groovy:
static import com.example.CurrencyType.*
...
static transients = ['dollar']
...
static Currency getDollar() {
    Currency.findByCode(DOLLAR)
}

Das würde Sie Currency.dollar in Ihrem anderen Code verwenden. In diesen Klassen können Sie auch einen statischen Import verwendet es nur dollar beziehen:

static import com.example.Currency.*
....
println dollar // gets the dollar from the db and prints it out
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top