我正在重新审视我去年写的课程跟踪(肮脏的逻辑)。目前我有一个处理所有状态跟踪的超级基类,但是我需要跟踪的每个属性的值都需要坚持标准get { return _x; } set { _isDirty = true; _x = value; }
的工作方式。
在玩过 Entity Framework 并阅读了Proxy Pattern之后,我希望有更好的方法来实现我的 IsDIrty 逻辑,同时能够利用自动实现的属性?
老实说,我不知道我在说什么。有没有办法我可以执行以下操作:
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 是如何实现的。