0

そのため、いくつかの grails オブジェクト (参照データ) に固有の「コード」を用意しており、それらを取得したい場合は、静的コードを使用してそれらを呼び出します。

Currency.findByCode(Currency.DOLLAR)

おそらく私は完全に間違っていますが、これはオブジェクトを取得するための非常に冗長で非グルーヴィーな方法のようです (特に、複数のオブジェクトに対して複数回実行する必要がある場合)。

より受け入れられたアプローチはありますか (オブジェクト自体への参照をどこかに持っている可能性があります)。これが最善の方法である場合、それは受け入れられる答えです。ありがとう。

4

2 に答える 2

3

静的変数を使用する場合にコードを短縮するためにできるもう 1 つの方法は、静的インポートを使用することです (これは実際には Java の一部ですが、groovy に移行するまで見つけられませんでした)。

クラスの先頭で CurrencyType (潜在的に、定義したさまざまなタイプの通貨を保持する列挙型) の静的インポートを行う場合:

static import com.example.CurrencyType.*

コード内で、すべての参照の前に を付ける必要がなくなりました。次のCurrencyTypeようにするだけです。

Currency.findByCode(DOLLAR)

変更する必要がない場合は、Currency クラスにヘルパー メソッドを追加して取得することもできます。

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

これによりCurrency.dollar、他のコードで使用できるようになります。これらのクラスでは、静的インポートを使用して参照することもできますdollar

static import com.example.Currency.*
....
println dollar // gets the dollar from the db and prints it out
于 2010-12-11T20:21:43.710 に答える
2

場合によります。参考データのようです。参照データが決して変更されない場合は、永続レイヤーをまったく使用しません。静的参照データである一連の静的変数をコーディングします。

再デプロイせずに参照データを変更できるようにしたい場合、最も実用的な方法はデータベースからそれらをロードすることです。データを操作できるある種の管理画面が表示されます。ehcache のような第 2 レベルのキャッシュを使用して、永続化レイヤーが実際にデータベースにヒットする量を制限します。この方法で非常に優れたパフォーマンスを得ることができます。ユーザー ガイドのセクション 5.5.2.2 を参照してください。

ただし、現在のアプローチでは、Currency.DOLLAR をコーディングする必要があるため、参照データの変更時に再展開する必要があります。おそらく、それを行う必要がない方がよいでしょう。

于 2010-12-11T16:59:46.970 に答える