Шаблон транзакционного дизайна

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
1 447
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Шаблон команд 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.

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

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

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