8

我正在寻找有关如何在 C# 中为我的对象实施审计跟踪的想法,对于当前项目,基本上我需要:

1.存储给定对象的旧值和新值。2.记录新对象的创建。3.删除旧对象。

是否有任何通用的方法来执行此操作,例如使用 C# 泛型,这样我就不必为基础对象的事件编写代码,例如创建、删除等(ORM 对象)。问题是,如果有一种注入审计跟踪的方法,如果有人正在使用。任何人都有任何经验或他们遵循的任何方法。以面向方面 (AOP) 方式执行此操作的任何方法。

请分享您的想法等。

4

5 回答 5

3

您可以实现与 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; }
}
于 2009-01-11T10:19:34.860 回答
1

问题非常类似于您 如何为您的对象实施审计跟踪(编程)?

我们使用 AOP(aspectJ 实现)实现了类似的解决方案。使用这个特定的点可以被捕获并且可以执行特定的操作。

这可以在我们喜欢的时候插入和关闭。

然而,我们的实现是在 J2EE..

如果您真的想在应用程序层中执行此操作,我建议您这样做。

希望能帮助到你..

于 2008-11-30T14:28:08.040 回答
1

除了上面线程中提到的一些事情之外,命令模式可能会有所帮助,如果您将对象上的所有状态更改包装在命令中,那么命令可以负责保持审计跟踪,而对象则不会不得不担心审计本身。当然,创建和处理命令会增加开销。

您可以将命令包装在任何现有的对象结构周围,您只需将操作委托给命令层,而不是直接在对象上执行。

于 2008-11-30T16:17:49.423 回答
1

您是否考虑过使用简单的通知模式?您可以让服务层引发诸如 NewObject、ChangedObject、DeletedObject 之类的事件,这些事件将被通用服务层监听,然后可以获取对象并保存结果。

如果要保存对象的状态,可以利用 Xml 序列化。

如果您使用 SQL Server 2008,则可以使用另一种方法,您可以实现新的审核功能,这将允许您审核对数据库记录的更改,您甚至可以在读取数据时跟踪(我认为)。

于 2008-12-01T01:37:02.120 回答
0

很老的问题,但对于那些想要审计 C# 对象的人,我会推荐Audit.NET库。

它具有日志到不同存储系统(SQL、Azure、Mongo)和审计不同系统(WCF、EF、MVC)的扩展。

注:我是楼主

于 2016-11-07T22:57:45.363 回答