>

2010年1月25日月曜日

定数の管理場所

システムで定数を定義する場合はどこで定義するかをちゃんと考える必要がある。
定義する場所はちょっと思いついただけでも次のようなところがある。
ちなみにこの文章で定数と呼んでいるのは結構あいまいで、ローカル変数以外の値のことを指している。

  1. 環境変数
  2. propertiesファイル
  3. J2EEコンテナなどのプラットフォームが読み込む定数ファイル
  4. Constant.javaなどのjavaファイル
  5. JVM引数
  6. Java引数
  7. DB

それぞれの管理場所は変更のしやすさや一覧のしやすさが異なる。またその値を参照できるスコープも異なる。それぞれの管理場所ならではの特性をちゃんと考えて定数を管理すべき場所を考える。

とはいえこれで決まりと言う完璧なルールは存在せずプログラムの性質(ただのJavaアプリであるとかサーバアプリであるとか)や運用スタイル次第なところがあるので自分でそれぞれの特性を考えた上で、運用を想像して最終的な結論を出す。ただ忘れてはならないのがそれぞれの管理場所には必ず差があり、その差に応じた管理場所を真剣に考えなくてはならないということ。

環境変数はそのマシン固有の値であり、1回決めてしまえばその後はほとんど気にする必要がない。システムを構成するマシンのスペックにバラつきがある場合は、そのスペックの影響を受けるであろうjavaのヒープサイズとかはここで決めると便利なことがある。

DBはシステムを構成するアプリサーバが複数台であるとき、どのサーバからも一貫性を保って参照でき、またデータの変更は永続的に残るといった特徴がある。参照の負荷は他のところで定義される値に比べると高い。ユーザの操作によって刻一刻と変化するシステムのステートをあらわす値(主な)やシステムに対して一斉に制御したいトリガ値とかはDBに保存すると良い。基本的にはDBに保存しないとどうしても成り立たない値のみが保存されると考えてよいと思う。

その他propertiesファイルは一覧性と変更のしやすさが比較的高いだとかConstantクラスの値はまず変更は出来ないなど各自で特性を考慮した上で決めるのが大事。

0 件のコメント: