Pergunta

Preciso criar um processo "transacional" usando uma API externa que não suporta transações COM+ ou .NET (Sharepoint para ser exato)

O que preciso fazer é conseguir executar uma série de processos em uma sequência, mas qualquer falha nessa sequência significa que terei que desfazer manualmente todas as etapas anteriores.No meu caso, existem apenas 2 tipos de etapas, ambas bastante fáceis de desfazer/reverter.

Alguém tem alguma sugestão de padrões de design ou estruturas que possam ser úteis para isso?

Foi útil?

Solução

Se suas alterações forem feitas no modelo de objeto do SharePoint, você poderá aproveitar o fato de que as alterações não serão confirmadas até que você chame o método Update() método do objeto modificado, como SPList.Update() ou SPWeb.Update().

Caso contrário, eu usaria o Comando Padrão de design.Capítulo 6 em Use a cabeça primeiro, padrões de design ainda tem um exemplo que implementa a funcionalidade de desfazer.

Outras dicas

O padrão de comando GoF oferece suporte a operações que podem ser revertidas.

Acho que o mesmo padrão pode ser usado para operações sequenciais (comandos sequenciais).

Outra boa maneira de reverter/desfazer é o Padrão de lembrança.Geralmente é usado para tirar um instantâneo do objeto em um determinado momento e permitir que o estado do objeto seja revertido para o memento.

Ao lado do GOF Padrão de Comando você também pode querer dar uma olhada no Script de transação padrão de P da EAA.

Você provavelmente deve criar um Comando Composto (ou Script de Transação) que seja executado em sequência.

Você pode querer dar uma olhada no Compensating Resource Manager:

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

Se você estiver usando C++ (ou qualquer outra linguagem com execução destruidora determinística quando os escopos terminam), você pode dar uma olhada em Protetores de escopo.Essa técnica provavelmente também pode ser adaptada ao .NET, fazendo com que o ScopeGuard implemente IDisposable e espalhando instruções "usando" conforme necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top