代码之家  ›  专栏  ›  技术社区  ›  Matt

事务性设计模式

  •  5
  • Matt  · 技术社区  · 16 年前

    我需要使用不支持COM+或.NET事务的外部API创建一个“事务”进程(确切地说,是SharePoint)

    我需要做的是能够在一个序列中执行多个进程,但是该序列中的任何失败都意味着我必须手动撤消前面的所有步骤。在我的例子中,只有两种类型的步骤,这两种都是相当容易撤消/回滚的AF。

    有没有人对设计模式或结构有什么有用的建议?

    6 回复  |  直到 10 年前
        1
  •  3
  •   vitule    16 年前

    如果对SharePoint对象模型进行了更改,则可以使用以下事实:只有在调用 Update() 修改对象的方法,例如 SPList.Update() SPWeb.Update() .

    否则,我将使用 命令 设计模式。第6章 Head First Design Patterns 甚至还有一个实现撤销功能的例子。

        2
  •  3
  •   Thomas Owens    16 年前

    gof命令模式支持可撤消的操作。

    我认为相同的模式可以用于顺序操作(顺序命令)。

        3
  •  2
  •   Cem Catikkas    16 年前

    回滚/撤消的另一个好方法是 Memento Pattern . 它通常用于在给定的时间拍摄对象的快照,并将对象状态恢复为memento。

        4
  •  1
  •   Huppie    16 年前

    在GOF旁边 Command Pattern 你可能还想看看 Transaction Script 模式从 P of EAA .

    您可能应该创建一个按顺序执行的复合命令(或事务脚本)。

        5
  •  0
  •   Kev    16 年前

    您可能需要查看补偿资源管理器:

    http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx

        6
  •  0
  •   On Freund    16 年前

    如果您正在使用C++(或任何其他具有确定性析构函数的语言在范围结束时执行),您可以查看 Scope Guards . 通过使scopeguard实现IDisposable并根据需要喷洒“using”语句,此技术可能也可以适应.NET。