我有一个系统,在这个系统中,对业务对象的所有更改都必须进行审计。因此,实体MyEntity具有一个Number属性,当您更改此字段时,系统将保留原始记录,并使用新的数字值创建另一条记录,并将原始记录存档。Number是而不是主键。还有一个Version字段来跟踪实体的每个版本,还有一个Id字段来跟踪跨多个版本的对象标识。到目前一切尚好。
如果删除实体,系统不会删除记录,而只是将其标记为已删除。到目前一切尚好。
问题出在这里。现在,客户端在列表中有一组实体,并且可能存在空白:
Item 1
Item 2
Item 3
Item 5
Item 6
...
Item 10他们希望能够做两件新的事情:
这对我来说很讨厌,因为通常情况下,任何对一个数字的更改都需要被审计,所以我不能就这样大批量地改变所有的数字。(这甚至更复杂,因为每个更改都需要由主管批准,并且更改可以恢复到以前的审计状态。)
更糟糕的是,第4项可能存在,但由于它处于存档状态而丢失。如果要折叠后续项,那么现有的归档项应该发生什么情况?我无法找到一种合理的方法来处理这些情况,同时对它们进行审核,并允许批准和恢复。有人知道怎么处理这事吗?
发布于 2012-04-03 15:13:00
我从未真正以一种完全令人满意的方式解决过这个问题,但我们通过实现一种特殊的模式来解决这个问题,这种模式仅适用于超级管理员,在这种模式下,对这种身份更改操作禁用审计,理由是Number (虽然不是主键)是一个基本的用户键,如果您更改它,您将对象标识更改为一个新的东西,它以干净的标记开始。不是理想,而是合理的妥协。
发布于 2012-02-27 21:55:52
我有一个系统,在这个系统中,对业务对象的所有更改都必须进行审计。
尝试为Number属性建议此规则的异常。如果该属性还由于其他原因而被使用,并且无论如何都必须进行审核,那么您可以建议一个新的字段OrderByNumber,并使它不受审计要求的影响。
如果你的论点遭到反对,我会尝试将数字或OrderByNumber重命名为荒谬而明显的东西。它会让人们微笑,他们会明白其中的要点:NotABusinessConcernNumberButUIElementNumberUsedForVisualOrdering.
如果您不可能对业务对象的审计规则有异常,那么您就必须创建一个不同的UI/表示对象层,并在这两者之间保持一个映射。
https://stackoverflow.com/questions/9469562
复制相似问题