2012-04-12 12 views
2

これは私がしばらくの間苦労してきたことです。事は:私は多くの(20かそこら)静的値の配列を持っています。私はと言うのはなので、実際にはいくつかのドメイン内の静的な配列として保存しているからです。私が知られているウェブサイトのリストを持っている場合たとえば、私が行いますGrails - ドメイン関連のプロパティを格納する場所

class Website { 
    ... 
    static websites = ["web1", "web2" ...] 
} 

しかし、必要であれば、私は簡単に配列を変更することができますので、私はこれはちょうど、発展途上んが、私はときに実行するつもりだ何アプリケーションは展開の準備ができていますか?私のプロジェクトでは、ある時点でこれらの値の配列が変化する可能性が非常に高いです。私はそのことについて研究してきましたが、外部の.propertiesファイル内にアプリケーションプロパティを格納することはできますが、配列を追加するとアプリケーションがそれを認識できないため、配列を保存することは無意味です新しいプロパティの名前が必要な場所に追加されるまで
もう1つの方法は、この情報をデータベースに格納することですが、なんらかの理由で、2つの行、つまりIDと名前を持つ20以上のテーブルを追加するのは無駄です。
最後のオプションは、私が知る限り、XMLですが、私はあまり経験はありません。 GroovyはXMLファイルの作成と読み込みの方法は比較的簡単ですが、アプリケーションでレイアウトが事前定義されているXMLを変更することがどれほど難しいか分かりません。

変更を再コンパイルする必要があるため、config.groovyに格納することはオプションではありません。

私は、いくつかの "標準"(おそらくベストプラクティス?)に対処する方法を見つけていません。

質問は次のとおりです。これらのアレイをどこに保存するのですか?

答えて

1
  1. 利用Enum属性の固定セット用:ルートパスとして次のパスのパス環境に依存しない利用するように。あなたがコードのいくつかの場所でいくつかの具体的な値に頼っているなら、これを行います。
  2. コード内の属性に依存していない場合は、String型を使用します。この場合、選択ボックスを指定する必要がある場合は、データベースのこのプロパティでdistinctクエリを実行してください。
  3. デフォルト:属性の動的セットごとにドメインクラスを使用します。もう一つのテーブルはOKです。
+0

#1と#3は確かに – David

+0

だから、1対1の関係がたくさんあるだろう。そして、それらの属性のいくつかに応じてフィルタリングとソートが必要です。たとえば、Book.cname.nameOfCategory(別のテーブルの属性)をBook.nameOfCategory(テーブルに直接格納されている属性)よりもソートする方が本当に高速ですか? – GalmWing

+0

複数のインスタンスに同じカテゴリがある場合は、1対1ではありません。あなたが恐怖を感じるパフォーマンスであれば、http://grails.org/doc/latest/guide/GORM.html#gormCompositionをご覧ください。 – Chris

1

単純な配列の場合は、groovy独自のタイプのプロパティファイルを使用する必要があります。これらのプロパティを使用すると、プロパティを文字列だけでなく適切なGroovy変数として定義することもできます。これらの変数を読み込むには、ConfigSlurperを使用して単純な方法でdinamicallyを実行します。定義するプロパティについて

:この種類のファイルを使用する方法の例については、次のConfigSlurperで見ることができ

def config = new ConfigSlurper().parse(new File('myconfig.groovy').toURL()) 
assert [1,2,3,4] == config.my.property.array 

ヒント:ロードプロパティファイルの場合

my.property.array=[1,2,3,4] 

:プロパティファイルにアクセスしたいときは、どのような環境でも動作するようにしたい。

import org.codehaus.groovy.grails.commons.ApplicationHolder 

def ctx = ApplicationHolder.application.mainContext.servletContext 
def rootPath = ctx.contextPath 
+0

興味深いアプローチのようですが、何らかの理由でConfigSlurperが「外部データ」(ユーザーが見たり変更できるもの)の代わりにアプリの設定を保存するように思えます。 – GalmWing

+0

うん、それは想定された使用ではありませんが、それはうまくいきませんか? :P – txominpelu

関連する問題