Domanda

Ho bisogno di creare un processo "transazionale" utilizzando un'API esterna che non supporti transazioni COM+ o .NET (Sharepoint per l'esattezza)

Ciò che devo fare è essere in grado di eseguire una serie di processi in sequenza, ma qualsiasi errore in quella sequenza significa che dovrò annullare manualmente tutti i passaggi precedenti.Nel mio caso ci sono solo 2 tipi di passaggi, entrambi abbastanza facili da annullare/ripristinare.

Qualcuno ha qualche suggerimento per modelli di progettazione o strutture che potrebbero essere utili per questo?

È stato utile?

Soluzione

Se le modifiche vengono apportate al modello a oggetti di SharePoint, è possibile sfruttare il fatto che le modifiche non vengono confermate finché non si chiama il file Update() metodo dell'oggetto modificato, ad esempio SPList.Update() O SPWeb.Update().

Altrimenti, utilizzerei il Comando Design pattern.Capitolo 6 a Testare i modelli di progettazione ha anche un esempio che implementa la funzionalità di annullamento.

Altri suggerimenti

Il modello di comando GoF supporta operazioni annullabili.

Penso che lo stesso schema possa essere utilizzato per operazioni sequenziali (comandi sequenziali).

Un altro buon modo per eseguire il rollback/annullamento è il file Modello ricordo.Di solito viene utilizzato per scattare un'istantanea dell'oggetto in un dato momento e consentire che lo stato dell'oggetto venga ripristinato nel ricordo.

Accanto al CdF Modello di comando potresti anche voler dare un'occhiata a Script di transazione modello da P dell'EAA.

Probabilmente dovresti creare un comando composito (o script di transazione) che venga eseguito in sequenza.

Potresti dare un'occhiata al Compensating Resource Manager:

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

Se stai utilizzando C++ (o qualsiasi altro linguaggio con esecuzione deterministica del distruttore al termine degli ambiti) puoi dare un'occhiata a Protezioni del mirino.Questa tecnica può probabilmente essere adattata anche a .NET facendo in modo che ScopeGuard implementi IDisposable e aggiungendo istruzioni "using" secondo necessità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top