事务设计模式

时间:2020-03-05 18:41:58  来源:igfitidea点击:

我需要使用不支持COM +或者.NET事务的外部API创建"事务"过程(确切地说是SharePoint)

我需要做的是能够按顺序执行许多过程,但是该顺序中的任何失败都意味着我将必须手动撤消所有先前的步骤。就我而言,只有两种类型的步骤,这两种af都很容易撤消/回滚。

任何人都对设计模式或者结构有任何建议,可能对此有用吗?

解决方案

回答

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

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

回答

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

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

回答

如果对SharePoint对象模型进行了更改,则可以使用以下事实:在调用已修改对象的" Update()"方法(例如" SPList.Update()"或者" SPWeb.Update")之前,不会提交更改。 ()`。

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

回答

如果我们使用的是C ++(或者在作用域结束时使用确定性析构函数执行的任何其他语言),则可以看一下Scope Guards。通过使ScopeGuard实现IDisposposable并根据需要添加" using"语句,该技术也可能适用于.NET。

回答

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

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

回答

回滚/撤消的另一种好方法是Memento模式。通常用于在给定的时间拍摄对象的快照,然后将对象状态恢复为备忘录。