Мне нужно создать «транзакционный» процесс с использованием внешнего API, который не поддерживает транзакции COM + или .NET (точнее, Sharepoint)
Что мне нужно сделать, так это иметь возможность выполнять несколько процессов в последовательности, но любой сбой в этой последовательности означает, что мне придется вручную отменить все предыдущие шаги. В моем случае есть только 2 типа шагов, оба из которых довольно легко отменить / откатить.
Есть ли у кого-нибудь предложения по шаблонам или структурам проектирования, которые могут быть полезны для этого?





Шаблон команд GoF поддерживает отменяемые операции.
Я думаю, что этот же шаблон можно использовать для последовательных операций (последовательных команд).
Возможно, вы захотите взглянуть на диспетчер компенсационных ресурсов:
http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx
Если вы вносите изменения в объектную модель SharePoint, вы можете использовать тот факт, что изменения не фиксируются до тех пор, пока вы не вызовете метод Update() измененного объекта, например SPList.Update() или SPWeb.Update().
В противном случае я бы использовал шаблон проектирования Командование. В главе 6 в Шаблоны проектирования Head First даже есть пример, который реализует функцию отмены.
Если вы используете C++ (или любой другой язык с детерминированным выполнением деструктора при завершении областей видимости), вы можете взглянуть на Охранники прицела. Этот метод, вероятно, также можно адаптировать к .NET, заставив ScopeGuard реализовать IDisposable и добавив при необходимости операторы using.
Рядом с GOF Командный шаблон вы также можете взглянуть на шаблон Скрипт транзакции из P EAA.
Вероятно, вам следует создать составную команду (или сценарий транзакции), которая выполняется последовательно.
Еще один хороший способ отката / отмены - Образец сувенира. Обычно он используется, чтобы сделать снимок объекта в заданное время и позволить вернуть состояние объекта к памятному моменту.