Сведения о вопросе

Solllo

06:10, 22nd August, 2020

Теги

Шаблон Транзакционного Проектирования

Просмотров: 395   Ответов: 6

У меня есть необходимость создать процесс "transactional" с помощью внешнего API, который не поддерживает транзакции COM+ или .NET (Sharepoint, чтобы быть точным)

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

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



  Сведения об ответе

$DOLLAR

08:33, 14th August, 2020

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

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


  Сведения об ответе

COOL

18:58, 11th August, 2020

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

В противном случае я бы использовал шаблон проектирования команды . В главе 6 в шаблонах проектирования Head First даже есть пример, который реализует функцию отмены.


  Сведения об ответе

ITSME

08:09, 10th August, 2020

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


  Сведения об ответе

darknet

18:36, 3rd August, 2020

Рядом с шаблоном команд GOF вы также можете посмотреть на шаблон скрипта транзакции из P EAA .

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


  Сведения об ответе

COOL

13:07, 15th August, 2020

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

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


  Сведения об ответе

crush

04:12, 7th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться