type
アプリケーション内の各ビジネス オブジェクトをデータベース内のテーブルに保存する必要がある状況があります。type
それぞれを何らかの形で表す必要がありenum
ます。
私のモデルから独立している別のdllに基本的なフレームワークが存在し、そうあるべきです。私のモデル クラスは、まず外部フレームワークから基本クラス/インターフェイスを継承する必要があります。問題はenum
、ビジネス オブジェクトを外部 dll に表すことができないことです。これは、どのモデルにも依存しない必要があるためです。例えば、
外部 dll の基本クラス:
namespace external
{
public enum EnumThatDenotesPoco { Vehicle, Animal, Foo }
public abstract class Framework
{
public abstract EnumThatDenotesPoco RecordType { get; }
}
}
と私のプロジェクト:
namespace ourApplication
{
public class Vehicle : Framework
{
public override EnumThatDenotesPoco RecordType { get { return EnumThatDenotesPoco.Vehicle; } }
}
}
Vehicle, Animal, Foo
私のアプリケーションプロジェクトにあるので動作しません。この場合、より良い設計は何でしょうか?
2つの方法がありますが、それが正しいアプローチかどうかはわかりません。
1.
namespace external
{
public abstract class Framework
{
public abstract Enum RecordType { get; } //base class of all enums
}
}
namespace ourApplication
{
public enum EnumThatDenotesPoco { Vehicle, Animal, Foo }
public class Vehicle : Framework
{
public override Enum RecordType { get { return EnumThatDenotesPoco.Vehicle; } }
}
}
これは機能します。vehicle.RecordType.
当然のこと0
です。
2.
namespace external
{
public class EntityBase // an empty enum class
{
}
public abstract class Framework
{
public abstract EntityBase RecordType { get; }
}
}
namespace ourApplication
{
public sealed class Entity : EntityBase
{
public static readonly Entity Vehicle = 1;
public static readonly Entity Animal = 2;
public static readonly Entity Foo = 3; //etc
int value;
public static implicit operator Entity(int x)
{
return new Entity { value = x };
}
public override string ToString()
{
return value.ToString();
}
}
public class Vehicle : Framework
{
public override EntityBase RecordType { get { return Entity.Vehicle; } }
}
}
どちらも機能します。