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

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

anyony对设计模式或结构有什么建议可能对此有用吗?

===============>>#1 票数:3

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

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

===============>>#2 票数:3 已采纳

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

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

===============>>#3 票数:2

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

===============>>#4 票数:1

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

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

===============>>#5 票数:0

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

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

===============>>#6 票数:0

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

  ask by Matt translate from so

未解决问题?本站智能推荐:

4回复

“日记”或“交易”设计模式? [关闭]

我正在寻找实现一个记录的对象,或者在其中有一个持久的事务。 也就是说,对象包含数据(可能是Map)。 当对数据进行更改时,这些更改将单独保存,如果您愿意,则为沙箱,以便任何外部对象都可以引用基本状态(在更改之前)或可以访问最新数据。 然后还有另一个操作将更改提交到基本状态。 它让我想
4回复

Hibernate中的事务管理与DAO设计模式

我有很多表,对于每个表,我们都有DAO接口和DAOImplementation类。 示例DAO接口 示例DAOImplementation类 示例主要方法 现在我的问题是如何处理DAOImpl中的Transaction? 我应该将Session Object作为每
5回复

防止重复提交的最佳设计模式是什么?

我一直在努力解决如何最好地防止重复发布数据的设计模式。 步骤如下: 客户使用唯一的GUID提交数据(客户生成的GUID-保证唯一) 服务器端软件可确保客户端guid在数据库中尚不存在 开始交易 处理数据(可能需要1-20秒,具体取决于有效负载) 提
4回复

具有检查点和恢复的事务服务的设计模式

我有一个多步骤过程,每个步骤执行一些网络IO(Web服务调用),然后保留一些数据。 我想以容错的方式设计它,这样,如果由于系统崩溃或其中一个步骤失败而导致服务失败,我可以从上一个无错误的步骤中恢复并重新启动。 这是我正在考虑的解决方法(这是相当高的水平): 将每个步骤的状态(N
1回复

是否有一个好的设计模式可以在一个事务中执行来自不同DAO的2种方法?

我有两个DAO,InvoiceDao和InvoiceItemDao,我每个都有方法update 。 这是Dao中的update方法: 如您所见,该方法开始并手动提交/回滚事务。 因此,如果我需要使用这种方法更新Invoice及其Items ,则将开始并完成两个事务。 有没有一种
1回复

Vb.net的匿名方法替代品是否有任何设计模式?

使用C#匿名委托,我们可以避免声明额外的方法,我知道在VB.NET中它们不可用,但是有没有我可以使用的设计模式,以便避免每次都编写额外的方法? 我需要SPSecurity.RunWithElevatedPrivileges,它将在我们的代码中多次使用。 例如 我想在VB.NET中
3回复

面向对象设计/模式 - 胖模型与事务脚本?

好的,'Fat'模型和事务脚本都解决了与保持业务逻辑的位置相关的设计问题。 我已经做了一些研究,并且流行的想法说,在模型中封装所有业务逻辑是要走的路(主要是因为事务脚本可能变得非常复杂并且经常导致代码重复)。 但是,如果我想在业务逻辑中使用第二个模型的TDG,这是如何工作的? 当然,事务脚
1回复

如何在交易中保存?

考虑这种情况; 假设我有WPF窗口,其中有四个对象绑定到其控件(Schedule,Customer,Contract,ScheduleDetails和Signer),它们代表后端数据库中的四个数据库表。 我希望当用户请求保存他/她输入的信息时,在原子操作中加入另一个词,所有保存操作都在一个事
1回复

交易脚本的实现

您能否建议我这两种(如果有)事务脚本模式中的哪一种是正确的? 基本上,我需要实现“纯” TS,这不是以某种方便的方式弯曲它。 问题是,当我从Table Data Gateway中获取数据时,我应该将它们存储以用于事务的不同部分(为清楚起见而使用逻辑部分),并在需要的地方使用它们,或者获取
1回复

跨系统交易

我在这里可能使用了错误的术语(如果有人知道,会喜欢使用专有名称),但是我经常遇到想要将某些内容保存到数据库中的问题。 在当前情况下,我有以下代码。 如您所愿,我正在做什么,就是将某些内容保存到数据库(在我的情况下是Sqlite)以及Windows Phone设备上的Isolated