のことができるようにすることですシーケンス内のいくつかのプロセスを実行しますが、そのシーケンスの失敗は、前のすべてのステップを手動で元に戻す必要があることを意味します。私の場合、ステップは2種類しかありません。どちらも、元に戻す/ロールバックするのがかなり簡単です。
anyonyはこれに便利なデザインパターンや構造を提案していますか?
のことができるようにすることですシーケンス内のいくつかのプロセスを実行しますが、そのシーケンスの失敗は、前のすべてのステップを手動で元に戻す必要があることを意味します。私の場合、ステップは2種類しかありません。どちらも、元に戻す/ロールバックするのがかなり簡単です。
anyonyはこれに便利なデザインパターンや構造を提案していますか?
変更がSharePointオブジェクトモデルに行われている場合は、あなたが呼び出すまで、あなたは変更がコミットされていないという事実を使用することができますSPList.Update()
またはSPWeb.Update()
のような修正されたオブジェクトのUpdate()
メソッド。
それ以外の場合は、コマンドデザインパターンを使用します。 Head First Design Patternsの第6章でも、元に戻す機能を実装した例があります。
GoFコマンドパターンは、取り消し可能な操作をサポートしています。
私は、同じパターンがシーケンシャル操作(シーケンシャルコマンド)に使用できると思います。
あなたがコンペンセートリソースマネージャを見てすることがあります:
http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx
C++(またはスコープが終了したときに確定的なデストラクタを実行する他の言語)を使用している場合は、Scope Guardsをご覧ください。この手法は、おそらくScopeGuardにIDisposableを実装させ、必要に応じて "using"ステートメントを振りかけることによって.NETにも適用できます。
GOF Command Patternの隣には、パターン(P of EAA)があります。
おそらく、順番に実行されるコンポジットコマンド(またはトランザクションスクリプト)を作成する必要があります。
ロールバック/元に戻すためのもう1つの良い方法はMemento Patternです。これは、通常、与えられた時間にオブジェクトのスナップショットを撮り、オブジェクト状態がメモに戻されるようにするために使用されます。