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