データベースで「タイプ」を示す良い方法は何ですか?
Action
多数の子クラスに継承される基本クラスがあります。には、 というデータベース内のテーブルの同等の列に対応する などのメンバーAction
があります。したがって、テーブルは次のようになります。Id
Name
action
action
id | name | type
type
列は、それが何のアクションであるかを示します。私のコードでは、それらは parent から派生した子クラスに対応していますAction
。クラスのタイプをデータベースのタイプフィールドに保存するにはどうすればよいですか?
db の type 列は、任意のデータ型にすることができます。
オプション:
action.GetType().ToString()
db に文字列として保存します。そして、リフレクションを使用して型の文字列表現を元の型に変換することにより、db からアクション型を取得します。しかし、クラス名が将来変更された場合、これは問題になります。各子クラスを示す列挙型を作成し
TypeAttribute
、次のように で装飾します。public abstract class Action { public enum Kind { [Type(typeof(ControlAction))] ControlAction = 1, [Type(typeof(UpdateAction))] UpdateAction = 2, etc } public abstract Kind ActionType { get; } } public class ControlAction : Action { public override Kind ActionType { get { return Kind.ControlAction; } } } public class UpdateAction : Action { public override Kind ActionType { get { return Kind.UpdateAction; } } } //etc
これは良さそうですが、ここから先はクラスごとに列挙型を作成する必要があります。そして、やるべきことが少し多すぎるように感じます。
<int, Type>
クラスを値に結び付ける別の静的ハッシュ テーブルを作成しint
ます。少し読みにくいかもしれません。
これに対するより良い解決策はありますか?