昨年書いたクラス トラッキング (ダーティ ロジック) を再検討しています。現在、すべての状態追跡を処理する超基本クラスがありますが、追跡する必要がある値を持つ各プロパティは、標準的get { return _x; } set { _isDirty = true; _x = value; }
な作業方法に固執する必要があります。
Entity Framework で遊んでProxy Patternを読んだ後、自動実装されたプロパティを利用しながら IsDirty Logic を実装するためのより良い方法があることを望んでいましたか?
正直なところ、私は自分が何について話しているのか見当がつきません。次のようなことができる方法はありますか?
public class Customer : ITrackable
{
[TrackState(true)] // My own attribute
public virtual string Name { get;set;}
[TrackState(true)]
public virtual int Age { get;set;}
// From ITrackable
public bool IsDirty { get; protected set; }
}
次に、属性を使用してプロパティの値を設定する前に、リフレクション (または別の魔法のソリューション) を使用して別のメソッドを呼び出す動的プロキシを実装しTrackState
ます。
明らかに、物理プロキシ クラスを作成して IoC を使用することで、これを簡単に行うことができます。
public class CustomerProxy : Customer
{
Customer _customer;
public override string Name
{
get { return _customer.Name; }
set { IsDirty = true; return _customer.Name; }
}
// Other properties
}
しかし、すべてのオブジェクトに対してこれを行う必要はありません。そうしないと、既存のソリューションから何のメリットもありません。誰かが私の好奇心を満たしてくれることを願っています。または、少なくとも EF がそれをどのように達成しているか教えてください。