Я пересматриваю свое отслеживание классов (грязная логика), которое я написал в прошлом году. В настоящее время у меня есть базовый класс uber, который занимается отслеживанием всего состояния, но каждое свойство, значения которого мне нужно отслеживать, должно придерживаться стандартного get { return _x; } set { _isDirty = true; _x = value; }
способа работы.
Поиграв с Entity Framework и ознакомившись с шаблоном прокси, я надеялся, что лучший способ реализовать мою логику 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 этого достигает.