Angenommen, Sie haben eine Anwendung, die 3 verschiedene externe Systeme verbindet. Sie müssen etwas in allen 3 Systemen aktualisieren. Im Falle eines Fehlers müssen Sie die Vorgänge rückgängig machen. Das ist nicht schwer zu implementieren, aber nehmen wir an, Operation 3 schlägt fehl, und beim Rollback schlägt das Rollback für Operation 1 fehl! Jetzt befindet sich das erste externe System in einem ungültigen Zustand...
Ich denke, eine mögliche Lösung besteht darin, die Anwendung zu beenden und eine manuelle Korrektur des externen Systems zu erzwingen, aber dann wiederum... Vielleicht hat es diese Informationen bereits verwendet (und ist deshalb gescheitert), oder wir haben keinen ausreichenden Zugang. Oder es ist vielleicht nicht einmal eine gute Möglichkeit, die Aktion rückgängig zu machen!
Gibt es gute Methoden für den Umgang mit solchen Fällen?
EDIT: Einige Details zur Bewerbung
Es handelt sich um eine Webanwendung für mehrere Benutzer. Der größte Teil der Arbeit wird mit geplanten Aufträgen (über Quartz.Net) erledigt, so dass die meisten Vorgänge in einem eigenen Thread ausgeführt werden. Einige Benutzeraktionen sollten jedoch Jobs auslösen, die mehrere Systeme aktualisieren. Die externen Systeme sind etwas unstabil.
Ich dachte daran, die Anwendung so zu ändern, dass sie das Muster "Befehl und Arbeitseinheit" verwendet.