【发布时间】:2010-09-13 16:43:24
【问题描述】:
我正在重新审视我去年写的课程跟踪(肮脏的逻辑)。目前我有一个处理所有状态跟踪的 uber 基类,但是我需要跟踪的每个属性的值都需要遵循标准的 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是如何实现的。
【问题讨论】:
-
完全不相关:杀手用户名,我喜欢它,哈哈。
标签: design-patterns c#-4.0 proxy-pattern