- PR -

アプリケーションを作る上で定数の配置場所の判断基準。DB?ファイル?

投稿者投稿内容
sand
大ベテラン
会議室デビュー日: 2007/01/15
投稿数: 247
投稿日時: 2008-04-21 08:05
アプリケーションを作る上で定数の配置場所の判断基準に困っています。
どのような場合にどこに配置するのが適切なのでしょうか?
条件を元に、どこに持つかを決定したいです。
候補として挙げた@〜Eのそれぞれについて条件を教えてください
皆さんの考えるベストプラクティスをお待ちしています。

@ソースコードの処理内にベタで書く
Aソースコードの冒頭にクラス定数として書く
B定数用のクラスとアクセッサを用意してそこに書く
CDBに持つ
DOSの環境変数として持つ
Eプロパティファイルに持つ
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-04-21 09:13
定数の有効範囲を考えればおのずと場所は特定されると思います。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2008-04-21 16:33
私の場合、変数も、定数も、メソッドも、クラスも、
アプリケーションの要件および技術的制限を考慮した最小のスコープ
で作ります。

候補のうちどれを選択するかについては、単純に説明するのが難しいので断念させて
ください。

この中で、「1.ソースコードの処理内にベタで書く」について反対する方がいらっしゃる
かもしれませんが、私は賛成としておきます。
私が死んだ後何年何千年と経っても明らかに変化しない値についてまでは、代理の名前
を割り当てて可変とする可能性を残す必要を感じません。私は値を埋めます。

「4.DBに持つ」については、他の選択肢と重複したスコープを持ちえますので、意見が
分かれるところでしょう。
RDBはもともと、
すべての情報はデータベースに持つ、ただ唯一アプリケーションに必要なのはデータ
ベースに接続するための情報
という設計がされています。これを素直に守るならば、可変とする値をデータベース
上に持ちたくなってしまいます。
実際、ほとんどのデータベースシステムが、自分自身の挙動を変化させるための情報を
自分自身のデータベース上に持っています。
これに従うかどうかは、アプリケーションの要件と、技術指針で決めればいいと思います。
システムが大規模になるほど、運用時にいじらなければならない部分がデータベース
システムに集約できるこの方法が好まれているように思います。

このリストを見ると、sandさんは自分なりのご回答をお持ちなのではないかと感じます。
もう少し具体的な例で議論もしてみるのも面白いかもしれないと思いました。

_________________
たつごろー
codeseek
こみゅぷらす
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-04-21 16:58
引用:

定数の有効範囲を考えればおのずと場所は特定されると思います。




もうすこし追加すると

定数の読み込みのタイミング
定数の使われる場所 
定数の変更頻度
影響を与えるもの

などもあげられます。 場合によっては複数の選択ができますが、
ケースバイーケースです。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-22 20:05
(付け加えてですが)

言語によるところもあります。
ストアドを使えばストアド用のconst
(Joinをするならテーブルに)
プログラム用のconst....
Shell用の.....

(既に出ていますが)

通常複数あると考えた方がよいですね。
  同期できるプログラムなどあればなおOKですね。。。。。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2008-04-22 20:20
引用:

たつごろーさんの書き込み (2008-04-21 16:33) より:
私の場合、変数も、定数も、メソッドも、クラスも、
アプリケーションの要件および技術的制限を考慮した最小のスコープ
で作ります。




私もこの意見に近いですね。
常に、オブジェクトも処理も最小のスコープになるようにしています。

定数を持つ場合は、その定数が持つ意味にふさわしいクラスに保持するようにしています。
定数用のクラスという考えは定数の意味を打ち消してしまうし、無闇にスコープが広がるので、私の中では、ありえないですね。

追記:各選択肢の先頭の文字が、OSXで見ると全て文字化けしています。


[ メッセージ編集済み 編集者: NAL-6295 編集日時 2008-04-22 21:04 ]
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-04-22 20:57
引用:

sandさんの書き込み (2008-04-21 08:05) より:
@ソースコードの処理内にベタで書く
Aソースコードの冒頭にクラス定数として書く
B定数用のクラスとアクセッサを用意してそこに書く
CDBに持つ
DOSの環境変数として持つ
Eプロパティファイルに持つ


たとえ永遠に変更されないにせよドキュメント性のために@よりAを選びます。
定数の組すべてが置き換えられることがある場合Bを選びます。
できるだけスコープの狭いほうを選択するのは私も賛成です。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-22 21:44
私、みなさんの意見とは真逆ですね
 スコープは最大限にしています。
  多分想定しているものが違うと思うんですが。。。。

<例えば>
 男:0 女:1 おかま:2

より普遍的ならスコープは最大になるような気がしますが。。。

スキルアップ/キャリアアップ(JOB@IT)