gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:28:44 25 4
gpt4 key购买 nike

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

  1. 审计追踪
  2. 撤消/恢复到特定版本(此类操作本身将被审核记录)

我看过一个稍微类似的问题here ,但它只涉及我正在尝试做的一部分。此外,我想捕获对象的整个生命周期(即 CRUD)。

我打算实现的方式如下:

  1. 有一个基于观察者模式的 ChangeManager 类
  2. 从“包装”命令模式中的更改的基础对象派生我的对象
  3. 在任何 CRUD 事件上使用命令对象通知 ChangeManager

注意:“更改”命令将包括:

  • 一个(有序的)二元组集合,详细说明字段更改(上一个,新的)
  • 进行更改的用户的 ID
  • 变化的时间戳

这只是“脱离我的头脑”——我正在考虑采用的方法可能存在漏洞——我将感谢以前实现过这种行为的人的一些帮助,以及一般建议,我上面概述的方法的优缺点 - 或者可能是更好/替代方法。也将不胜感激为我指出正确方向的一两个片段!

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

最佳答案

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

从我的角度来看,我会考虑使用“事件溯源”。有关更多信息,请参见此处:

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 引用。

关于c# - 设计模式以促进这些行为(审计跟踪行为和撤消),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com