- - PR -
DB項目と列挙型の連動
1
投票結果総投票数:7 | |||
---|---|---|---|
一元化 | 0票 | 0.00% | |
分ける | 1票 | 14.29% | |
項目の性質による | 4票 | 57.14% | |
その他 | 2票 | 28.57% | |
|
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-19 11:14
DB項目を列挙型として扱う場合です。
#DB項目=VARCHAR(1)とします。 DBを更新する際に列挙型の値をそのまま使うかDB項目の値の定数を別に作るかという問題です。 意味としては等価とします。(列挙型にそれ以外の意味がない) 1.一元化する
DB更新の際は、 Encoding.Default.GetString(kubun.A) 等と列挙型の値をそのまま使用する。 2.分ける
DB更新の際は、別途コンバータ等で変換する。 個人的には列挙型はプログラム内のひとつの型として完結したい気がしますので分けてしまいそうです。 ただ、等価だしKubunValueも結局コーディングしてるだろがと言われるとそのとおり。 何か指針等はありますでしょうか? #ポイントはDBだとは思いますが。 | ||||||||
|
投稿日時: 2008-02-19 13:31
ただ列挙値を数値に変換するだけでよかろうが、複雑なマッピングが必要だろうが、いずれにしてもデータベースでどう値を持つかのルールに従って対応する値に変換する必要があります。ですので、どちらでも問題ないと思います。
ただ、変換のルールを実装する場所は1箇所だけが好ましいですね。 ---------- なので、その他に投票しました。 [ メッセージ編集済み 編集者: 一郎 編集日時 2008-02-19 13:32 ] | ||||||||
|
投稿日時: 2008-02-19 18:21
属性を使って各列挙値に値を割り当てる方法もありますね。
ただ、リフレクションを使うことになるので、 取得した属性の定義をキャッシュしておくような仕組みも必要と思います。 Public Enum Kubun As Integer <EnumDbValue("A")> A = 0 <EnumDbValue("B")> B = 1 End Enum ジェネリックで列挙型を簡単に扱えるともっと楽になるんですけどねー。 | ||||||||
|
投稿日時: 2008-02-19 22:32
「その他」に投票しました。
列挙値に意味がある場合には、列挙型を使用せず、 クラスを使うようにしています。 | ||||||||
|
投稿日時: 2008-02-20 13:02
DBがデータの基点であることは間違いないですから
プログラム側に余計な依存性を作らない点と項目の性質などを絡めて 臨機応変に対応することにします。 | ||||||||
|
投稿日時: 2008-02-20 13:41
NAL-6295です。
DBの値とアプリケーションの中で利用する値(Enum)の相互変換をするためのInterfaceだけ定義しておいて、項目の種類ごとにそのInterfaceを実装したクラスを作成するようにしています。 |
1