【问题标题】:How do you implement audit trail for your objects (Programming)?您如何为您的对象实施审计跟踪(编程)?
【发布时间】:2010-09-13 23:31:32
【问题描述】:

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

上触发的审计跟踪对象
  1. OnSaving
  2. 正在删除

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

如何在 OOP 代码中实施审计跟踪?请分享您的见解?有什么图案之类的吗?最佳实践等?另一件事是在运行单元测试时如何禁用审计,因为我不需要审计它们但因为基础对象有代码。

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

【问题讨论】:

    标签: c# logging object audit


    【解决方案1】:

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

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

    编辑:我对每个我想认为可审计的属性都有一个 [Audit] 属性,并使用反射来查找它们,从而使该方法不特定于被审计的对象。

    【讨论】:

    • 我对这个答案投了赞成票,但是在使用数据库触发器时要注意的一件事是事务括号。即使发生错误并且事务回滚,您有时也希望审核事件。
    【解决方案2】:

    我不知道它是否能与您的 ORM 无缝匹配,但我在 ERP 应用程序中使用了 Point-in-Time 数据库设计,并且非常推荐它。您会自动从此架构中获得历史记录和审计,以及其他好处。

    【讨论】:

    • 我正在处理多租户应用程序,我们所有的租户记录都将存储在一个带有 TenantId 的数据库中。如果我使用 PTA ,我将在数据库中得到很多行,尤其是对于更新 :(
    【解决方案3】:

    如果您创建一组用于与数据库交互的 DAO(数据访问对象),我更多来自 SW 方面而不是 DB 方面。然后,我会将审计功能插入到需要跟踪的 DAO 中的相应功能中。

    数据库触发器解决方案也是可行的,这取决于你想把你的功能放在哪里,在数据库中还是在代码中

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

    【讨论】:

      【解决方案4】:

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

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

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

      希望对你有帮助..

      【讨论】:

      • 你有样品或链接吗?
      【解决方案5】:

      我在 Hibernate(另一个 ORM)中使用会话拦截器完成了这项工作。这样审计代码就和你的代码分开了。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          我们有一个表,所有审计跟踪条目都存储在其中。每个表上都有一个数据库触发器(它由存储过程放置在那里,但这与此答案无关)。更改值时,旧值将存储在审计跟踪中。我们的有点复杂,因为我们还有一个查找表,其中包含我们拥有的每个表的列表,以及另一个包含每个表的每个字段的表。这使我们能够根据第一列中该表的 ID 在哪个表中查找审计跟踪中的条目。然后我们也可以根据第二个表的 ID 确切地知道我们要查找的字段。这使我们不必为表名和字段名存储字符串。为了显示它,我们的网格在删除按钮旁边有一个“审计跟踪”按钮。这将打开一个带有该记录历史的弹出网格。我们使用剑道网格,但这些实现都不是必需的。弹出窗口是一个引导弹出窗口。

          【讨论】:

            猜你喜欢
            • 2011-05-12
            • 2011-08-27
            • 2010-09-24
            • 1970-01-01
            • 2021-05-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-07
            相关资源
            最近更新 更多