Я пересматриваю свой класс отслеживания (грязная логика), который я написал в прошлом году.В настоящее время у меня есть базовый класс Uber, который отвечает за отслеживание всех состояний, но каждое свойство, значения которого мне нужно отслеживать, должно придерживаться стандартного 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
.
Очевидно, что я мог бы легко сделать это, создав прокси-класс phyiscal и используя IoC:
public class CustomerProxy : Customer
{
Customer _customer;
public override string Name
{
get { return _customer.Name; }
set { IsDirty = true; return _customer.Name; }
}
// Other properties
}
Но мне не нравится делать это для каждого объектаиначе нет пользы от моего существующего решения.Надеюсь, что кто-то может удовлетворить мое любопытство или хотя бы рассказать мне, как EF достигает его.