5

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

我需要做的是能够按顺序执行多个进程,但是该序列中的任何失败都意味着我将不得不手动撤消前面的所有步骤。在我的情况下,只有 2 种类型的步骤,两者都相当容易撤消/回滚。

是否有人对可能对此有用的设计模式或结构有任何建议?

4

6 回答 6

3

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

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

于 2008-08-22T12:11:49.753 回答
3

如果您对 SharePoint 对象模型进行了更改,您可以使用这样一个事实,即在调用Update()修改对象的方法之前不会提交更改,例如SPList.Update()SPWeb.Update()

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

于 2008-08-22T12:40:18.250 回答
2

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

于 2008-08-28T15:57:47.647 回答
1

在 GOF命令模式旁边,您可能还想看看P of EAA中的事务脚本模式。

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

于 2008-08-22T13:09:17.430 回答
0

您可能想看看补偿资源管理器:

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

于 2008-08-22T12:27:38.763 回答
0

如果您使用 C++(或在作用域结束时执行确定性析构函数的任何其他语言),您可以查看Scope Guards。通过使 ScopeGuard 实现 IDisposable 并根据需要散布“使用”语句,这种技术也可能适用于 .NET。

于 2008-08-22T12:56:42.423 回答