不変にしたい次のC#クラスがあるとしましょう。パラメータ化されたコンストラクタを使用してのみ設定できます。
public class InsulineInjection
{
private InsulineInjection()
{
// We don't want to enable a default constructor.
}
public InsulineInjection(Millilitre millilitre, DateTime dateTime, string remark)
{
this.Remark = remark;
this.DateTime = dateTime;
this.Millilitre = millilitre;
}
public string Remark { get; private set; }
public DateTime DateTime { get; private set; }
public Millilitre Millilitre { get; private set; }
}
ここで、ORMを使用してこのPOCOを作成したいと思います。ただし、私が見る限り、すべての.NET ORMは、プロパティがアクセス可能であり、このPOCOを作成できるパブリックコンストラクターを持っていることを期待しています。だから私は私のPOCOをこれに変更する必要があります:
public class InsulineInjection
{
public InsulineInjection()
{
}
public InsulineInjection(Millilitre millilitre, DateTime dateTime, string remark)
{
this.Remark = remark;
this.DateTime = dateTime;
this.Millilitre = millilitre;
}
public string Remark { get; set; }
public DateTime DateTime { get; set; }
public Millilitre Millilitre { get; set; }
}
ただし、これにより、POCOが再び変更可能になります。それを使用している人は、後でプロパティを変更するだけで、私が望むものではありません。
私が見る限り、これは2つの異なる方法で解決できます。
- 作成したコンストラクターを使用して正しいPOCOインスタンスを作成できるように、独自のデータアクセスレイヤーを作成します(またはormを変更します)。
- ある種のマッパーを作成します。ORMに単純なDTOオブジェクトを作成させ、マッパーを使用して適切なタイミングでDTOオブジェクトをPOCOに変換します。
私は解決策2に傾いています。誰かがこれを行う方法の例を持っていますか?または、誰かが私が上で説明したものよりも優れた解決策を持っていますか?