如何实现对象的审核跟踪(编程)?
我需要为对象上的添加/编辑/删除实施审计跟踪,我正在使用ORM(XPO)定义对象等。我实现了在以下对象上触发的审计跟踪对象
- 节省
- 删除中
对于基础对象,我将更改存储在Audit-AuditTrail(Mast-Det)表中,以进行字段更改。等使用一些方法服务称为。
我们如何在OOP代码中实施审核跟踪?请分享见解?有图案吗?最佳做法等?另一件事是,在运行单元测试时如何禁用审核,因为我不需要审核它们,但是由于基础对象具有代码。
对象更改(编辑/添加/删除)以及哪些字段更改需要审核
解决方案
我知道这不能回答问题,但是为了记录,我更喜欢在数据库中处理这种类型的审核逻辑。
如果可以的话,数据库触发器是首选的方法。
但是,最近我不得不在客户端代码中执行此操作,最终我写了一个类,该类在打开对象进行编辑时创建了该对象的深(值)副本,并在保存时比较了两个对象(使用ToString()仅)并将所有更改写入审核表。
编辑:我在每个我想考虑可审计的属性上都有一个[审计]属性,并使用反射来查找它们,从而使该方法对于所审计的对象而言是非特定的。
如果我们创建用于与数据库交互的一组DAO(数据访问对象),那么从SW方面来的还有DB方面。然后,我将审计功能插入到DAO中需要跟踪的各个功能中。
数据库触发器解决方案也是可行的,它取决于我们希望在数据库或者代码中放置功能的位置
有很多ORM(对象关系映射)工具可以为我们创建DAO层。
我不知道它是否可以与ORM无缝配合,但是我为ERP应用程序使用了时间点数据库设计,并真的推荐它。我们会自动从此体系结构中获得"历史记录"和"审核"以及其他好处。
我们已经使用AOP(aspectJ实现)实现了类似的解决方案。使用该特定点可以被捕获并且可以执行特定操作。
我们可以在需要时将其插入和拔出。
如果我们真的想在应用程序层中这样做,我建议我们这样做。
希望能帮助到你..
我已经在Hibernate(另一个ORM)中使用Session的拦截器完成了此操作。这样,审计代码便与代码分开了。