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

时间:2020-03-06 14:52:13  来源:igfitidea点击:

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

  • 节省
  • 删除中

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

我们如何在OOP代码中实施审核跟踪?请分享见解?有图案吗?最佳做法等?另一件事是,在运行单元测试时如何禁用审核,因为我不需要审核它们,但是由于基础对象具有代码。

对象更改(编辑/添加/删除)以及哪些字段更改需要审核

解决方案

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

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

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

编辑:我在每个我想考虑可审计的属性上都有一个[审计]属性,并使用反射来查找它们,从而使该方法对于所审计的对象而言是非特定的。

如果我们创建用于与数据库交互的一组DAO(数据访问对象),那么从SW方面来的还有DB方面。然后,我将审计功能插入到DAO中需要跟踪的各个功能中。

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

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

我不知道它是否可以与ORM无缝配合,但是我为ERP应用程序使用了时间点数据库设计,并真的推荐它。我们会自动从此体系结构中获得"历史记录"和"审核"以及其他好处。

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

我们可以在需要时将其插入和拔出。

如果我们真的想在应用程序层中这样做,我建议我们这样做。

希望能帮助到你..

我已经在Hibernate(另一个ORM)中使用Session的拦截器完成了此操作。这样,审计代码便与代码分开了。