- PR -

DB項目と列挙型の連動

1
投票結果総投票数:7
一元化 0 0.00%
分ける 1 14.29%
項目の性質による 4 57.14%
その他 2 28.57%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-02-19 11:14
DB項目を列挙型として扱う場合です。
#DB項目=VARCHAR(1)とします。

DBを更新する際に列挙型の値をそのまま使うかDB項目の値の定数を別に作るかという問題です。
意味としては等価とします。(列挙型にそれ以外の意味がない)

1.一元化する

コード:
Public Enum Kubun As Integer
    A = Asc("A")
End Enum


DB更新の際は、
Encoding.Default.GetString(kubun.A)
等と列挙型の値をそのまま使用する。

2.分ける

コード:
Public Enum Kubun As Integer
    A = 0
    B = 1
End Enum

Public Class KubunValue
    Public Shared ReadOnly A As String = "A"
End Class


DB更新の際は、別途コンバータ等で変換する。


個人的には列挙型はプログラム内のひとつの型として完結したい気がしますので分けてしまいそうです。
ただ、等価だしKubunValueも結局コーディングしてるだろがと言われるとそのとおり。

何か指針等はありますでしょうか?
#ポイントはDBだとは思いますが。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2008-02-19 13:31
ただ列挙値を数値に変換するだけでよかろうが、複雑なマッピングが必要だろうが、いずれにしてもデータベースでどう値を持つかのルールに従って対応する値に変換する必要があります。ですので、どちらでも問題ないと思います。
ただ、変換のルールを実装する場所は1箇所だけが好ましいですね。

----------
なので、その他に投票しました。

[ メッセージ編集済み 編集者: 一郎 編集日時 2008-02-19 13:32 ]
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2008-02-19 18:21
属性を使って各列挙値に値を割り当てる方法もありますね。
ただ、リフレクションを使うことになるので、
取得した属性の定義をキャッシュしておくような仕組みも必要と思います。

Public Enum Kubun As Integer
 <EnumDbValue("A")> A = 0
 <EnumDbValue("B")> B = 1
End Enum

ジェネリックで列挙型を簡単に扱えるともっと楽になるんですけどねー。

jama
常連さん
会議室デビュー日: 2006/09/12
投稿数: 45
投稿日時: 2008-02-19 22:32
「その他」に投票しました。
列挙値に意味がある場合には、列挙型を使用せず、
クラスを使うようにしています。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-02-20 13:02
DBがデータの基点であることは間違いないですから
プログラム側に余計な依存性を作らない点と項目の性質などを絡めて
臨機応変に対応することにします。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2008-02-20 13:41
NAL-6295です。

DBの値とアプリケーションの中で利用する値(Enum)の相互変換をするためのInterfaceだけ定義しておいて、項目の種類ごとにそのInterfaceを実装したクラスを作成するようにしています。

1

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