Вопрос

Мне нужно создать «транзакционный» процесс с использованием внешнего API, который не поддерживает транзакции COM+ или .NET (точнее, SharePoint)

Что мне нужно сделать, так это иметь возможность выполнять ряд процессов в определенной последовательности, но любой сбой в этой последовательности означает, что мне придется вручную отменить все предыдущие шаги.В моем случае есть только два типа шагов, оба из которых довольно легко отменить/откатить.

Есть ли у кого-нибудь предложения по шаблонам или структурам проектирования, которые могут быть полезны для этого?

Это было полезно?

Решение

Если ваши изменения внесены в объектную модель SharePoint, вы можете использовать тот факт, что изменения не фиксируются до тех пор, пока вы не вызовете метод Update() метод модифицированного объекта, например SPList.Update() или SPWeb.Update().

В противном случае я бы использовал Команда Шаблон проектирования.Глава 6 в Шаблоны проектирования с головой вперед даже есть пример, реализующий функцию отмены.

Другие советы

Шаблон команды GoF поддерживает отменяемые операции.

Я думаю, что тот же шаблон можно использовать и для последовательных операций (последовательных команд).

Еще один хороший способ отката/отмены — это Сувенирный узор.Обычно он используется для создания моментального снимка объекта в определенный момент времени и позволяет вернуть состояние объекта на память.

Рядом с ГОФ Шаблон команды возможно, вам также захочется взглянуть на Скрипт транзакции образец из П ЕАА.

Вероятно, вам следует создать составную команду (или сценарий транзакции), которая выполняется последовательно.

Возможно, вы захотите взглянуть на Компенсирующий менеджер ресурсов:

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

Если вы используете C++ (или любой другой язык с детерминированным выполнением деструктора, когда область видимости заканчивается), вы можете взглянуть на Охранники прицела.Этот метод, вероятно, также можно адаптировать к .NET, заставив ScopeGuard реализовать IDisposable и добавив операторы «using» по мере необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top