设计模式以促进这些行为(审计跟踪行为和撤消)

时间:2011-08-03 12:34:31

标签: c# design-patterns system-design

我正在研究一个需要展示这些行为的系统:

  1. 审计跟踪
  2. 撤消/恢复到特定版本(此类操作本身将进行审核记录)
  3. 我看到了一个稍微类似的问题here,但它只涉及我正在尝试做的部分内容。此外,我想捕获一个对象的整个生命周期(即CRUD)。

    我打算实现这个的方式如下:

    1. 拥有基于观察者模式的ChangeManager类
    2. 从“包装”命令模式中的更改的基础对象派生我的对象
    3. 使用任何CRUD事件上的命令对象通知ChangeManager
    4. 注意: 'change'命令将包含:

      • 一个(有序的)2元组的集合,详细说明了字段更改(prev,new)
      • 进行更改的用户的ID
      • 更改的时间戳

      这只是“脱离我的头脑” - 我想要采取的方法可能存在漏洞 - 我会感谢以前实施过此类行为的人的一些帮助,也是一般建议,我在上面概述的方法的利弊 - 或者可能是更好/替代的方法。我还将非常感谢一两个指向正确方向的片段!

      我将使用C#作为实现语言。

1 个答案:

答案 0 :(得分:5)

这是一个相当复杂的话题。有许多正式的方法。

从我的角度来看,我会考虑使用“事件采购”。有关详细信息,请参见此处:

http://martinfowler.com/eaaDev/EventSourcing.html

这将负责填充更改日志并维护当前状态,并使您能够重放事件以撤消更改。完全基于此的事件驱动架构,例如CQRS:

http://martinfowler.com/bliki/CQRS.html

另一种选择是命令模式,它允许撤消但不消耗上述所有要求,例如审计跟踪。带撤消的命令模式示例如下:

http://mattberther.com/2004/09/16/using-the-command-pattern-for-undo-functionality

希望这有用。

编辑:提供CQRS参考。