我需要使用不支持COM +或.NET事务的外部API创建“事务”进程(确切地说是Sharepoint)
我需要做的是能够按序列执行多个进程,但是该序列中的任何失败意味着我将不得不手动撤消所有之前的步骤。在我的情况下,只有两种类型的步骤,都是相当容易撤消/回滚的。
Anyony对设计模式或结构有什么建议吗?
答案 0 :(得分:3)
GoF命令模式支持可撤销操作。
我认为相同的模式可以用于顺序操作(顺序命令)。
答案 1 :(得分:3)
如果对SharePoint对象模型进行了更改,则可以使用以下事实:在调用已修改对象的Update()
方法之前,不会提交更改,例如SPList.Update()
或{{1 }}
否则,我会使用 Command 设计模式。 Head First Design Patterns中的第6章甚至有一个实现撤消功能的例子。
答案 2 :(得分:2)
回滚/撤消的另一个好方法是Memento Pattern。它通常用于在给定时间拍摄对象的快照,并将对象状态恢复为纪念品。
答案 3 :(得分:1)
在GOF Command Pattern旁边,您可能还想查看Transaction Script中的P of EAA模式。
您应该创建一个按顺序执行的复合命令(或事务脚本)。
答案 4 :(得分:0)
您可能需要查看补偿资源管理器:
http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx
答案 5 :(得分:0)
如果您正在使用C ++(或在范围结束时使用确定性析构函数执行的任何其他语言),您可以查看Scope Guards。这种技术也可以通过使ScopeGuard实现IDisposable并根据需要使用“使用”语句来适应.NET。