Frage

Ich muss einen „transaktionalen“ Prozess mithilfe einer externen API erstellen, die keine COM+- oder .NET-Transaktionen unterstützt (genauer gesagt SharePoint).

Was ich tun muss, ist in der Lage zu sein, eine Reihe von Prozessen nacheinander auszuführen, aber jeder Fehler in dieser Reihenfolge bedeutet, dass ich alle vorherigen Schritte manuell rückgängig machen muss.In meinem Fall gibt es nur zwei Arten von Schritten, die sich beide relativ einfach rückgängig machen bzw. zurücksetzen lassen.

Hat jemand Vorschläge für Designmuster oder Strukturen, die hierfür nützlich sein könnten?

War es hilfreich?

Lösung

Wenn Ihre Änderungen am SharePoint-Objektmodell vorgenommen werden, können Sie die Tatsache nutzen, dass Änderungen erst festgeschrieben werden, wenn Sie das aufrufen Update() Methode des geänderten Objekts, z SPList.Update() oder SPWeb.Update().

Ansonsten würde ich das verwenden Befehl Designmuster.Kapitel 6 in Designmuster von Kopf bis Fuß hat sogar ein Beispiel, das die Rückgängig-Funktion implementiert.

Andere Tipps

Das GoF-Befehlsmuster unterstützt rückgängig zu machende Vorgänge.

Ich denke, dass das gleiche Muster für sequentielle Operationen (sequentielle Befehle) verwendet werden kann.

Eine weitere gute Möglichkeit zum Zurücksetzen/Rückgängigmachen ist die Memento-Muster.Es wird normalerweise verwendet, um zu einem bestimmten Zeitpunkt einen Schnappschuss des Objekts zu erstellen und den Zustand des Objekts auf das Erinnerungsstück zurückzusetzen.

Neben dem GOF Befehlsmuster Vielleicht möchten Sie auch einen Blick darauf werfen Transaktionsskript Muster von P von EAA.

Sie sollten wahrscheinlich einen zusammengesetzten Befehl (oder ein Transaktionsskript) erstellen, der nacheinander ausgeführt wird.

Vielleicht möchten Sie einen Blick auf den Compensating Resource Manager werfen:

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

Wenn Sie C++ (oder eine andere Sprache mit deterministischer Destruktorausführung am Ende der Gültigkeitsbereiche) verwenden, können Sie einen Blick darauf werfen Zielfernrohrschützer.Diese Technik kann wahrscheinlich auch an .NET angepasst werden, indem ScopeGuard IDisposable implementiert und nach Bedarf „using“-Anweisungen einstreut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top