如何实现对象的审计跟踪(编程)?

我需要在我的对象上实现添加/编辑/删除的审计跟踪,我使用ORM(XPO)来定义我的对象等。我实现了一个触发的审计跟踪对象

  1. OnSaving
  2. OnDeleting

在基础对象中,我将更改存储在Audit-AuditTrail(Mast-Det)表中,以进行字段更改。 使用一些叫做的方法服务。

如何在OOP代码中实现审计跟踪? 请分享您的见解? 任何模式等? 最佳做法等? 另一件事是如何在运行unit testing时禁用审计,因为我不需要审计它们,但是因为基础对象具有代码。

对象(编辑/添加/ del)的更改以及需要审核的字段更改

如果可以的话,数据库触发器是首选的方法。

但是,最近我不得不在客户端代码中执行此操作,最后编写了一个类,该对象在打开进行编辑时创建了对象的深(值)副本,比较了两个对象的保存时间(使用ToString()只有)并将任何更改写入审计表。

编辑:我在每个属性上都有一个[Audit]属性我想考虑可审计并使用reflection来查找它们,使得该方法对于被审计的对象不具体。

我不知道它是否能与你的ORM无缝融合,但我在 ERP应用程序中使用了Point-in-Time数据库设计,并且真的推荐它。 您可以自动从此体系结构中获取历史记录和审核,以及其他好处。

如果你创建了一组用于与数据库交互的DAO(数据访问对象),那么我更多地来自SW侧的数据库端。 然后,我将审计function插入到需要跟踪的DAO中的相应function中。

数据库触发器解决方案也是可行的,它取决于您希望在数据库或代码中放置function的位置

有很多ORM(对象关系映射)工具可以为您创建DAO层。

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

这可以在我们喜欢的时候插上电源插上。

如果你真的想在app层中做,我建议这样做。

希望能帮助到你..

我知道这不能回答你的问题,但是为了记录,我更喜欢在数据库中处理这种类型的审计逻辑。

我在使用Interceptor for Session的Hibernate(另一个ORM)中完成了这个。 这样,审计代码就会与您的代码分开。