我正在寻找有关如何在 C# 中为我的对象实施审计跟踪的想法,对于当前项目,基本上我需要:
1.存储给定对象的旧值和新值。2.记录新对象的创建。3.删除旧对象。
是否有任何通用的方法来执行此操作,例如使用 C# 泛型,这样我就不必为基础对象的事件编写代码,例如创建、删除等(ORM 对象)。问题是,如果有一种注入审计跟踪的方法,如果有人正在使用。任何人都有任何经验或他们遵循的任何方法。以面向方面 (AOP) 方式执行此操作的任何方法。
请分享您的想法等。
您可以实现与 INotifyPropertyChanged 类似的东西,但略有不同。我已经提取了大部分 INotifyPropertyChanged 并将其更改为通用并存储新旧值。然后,您可以拥有某种可以收听此内容的管理类,并且 onSaving 和 onDeleting 您可以处理这些更改。
public interface INotifyProperyChanged<T>
{
event PropertyChangedEventHandler<T> PropertyChanged;
}
public delegate void PropertyChangedEventHandler<T>(object sender,
PropertyChangedEventArgs<T> e);
public class PropertyChangedEventArgs<T> : EventArgs
{
private readonly string propertyName;
public PropertyChangedEventArgs(string propertyName)
{
this.propertyName = propertyName
}
public virtual string PropertyName { get { return propertyName; } }
public T OldValue { get; set; }
public T NewValue { get; set; }
}
问题非常类似于您 如何为您的对象实施审计跟踪(编程)?
我们使用 AOP(aspectJ 实现)实现了类似的解决方案。使用这个特定的点可以被捕获并且可以执行特定的操作。
这可以在我们喜欢的时候插入和关闭。
然而,我们的实现是在 J2EE..
如果您真的想在应用程序层中执行此操作,我建议您这样做。
希望能帮助到你..
除了上面线程中提到的一些事情之外,命令模式可能会有所帮助,如果您将对象上的所有状态更改包装在命令中,那么命令可以负责保持审计跟踪,而对象则不会不得不担心审计本身。当然,创建和处理命令会增加开销。
您可以将命令包装在任何现有的对象结构周围,您只需将操作委托给命令层,而不是直接在对象上执行。
您是否考虑过使用简单的通知模式?您可以让服务层引发诸如 NewObject、ChangedObject、DeletedObject 之类的事件,这些事件将被通用服务层监听,然后可以获取对象并保存结果。
如果要保存对象的状态,可以利用 Xml 序列化。
如果您使用 SQL Server 2008,则可以使用另一种方法,您可以实现新的审核功能,这将允许您审核对数据库记录的更改,您甚至可以在读取数据时跟踪(我认为)。