私は、リモート オブジェクト (クローンを操作するために複製できないオブジェクト) の変更を命令するコードの一部を操作している状況に遭遇しました。新しい状態にして、一連の反対のコマンドで行ったすべての変更を元に戻します。問題は、これらすべての変更の途中でエラーが発生した場合、これまでに行ったすべての変更をロールバックできるようにしたいということです。
私の頭に浮かんだ最適な解決策は、Python の try-finally ワークフローですが、コマンドのシーケンスが長い場合はかなり問題になります。
try:
# perform action
try:
# perform action
try:
# ...
finally:
# unroll
finally:
# unroll
finally:
# unroll
このように、必要なコマンドが増えるほど、インデントとネストが深くなり、コードが読みにくくなります。コマンドごとにロールバックアクションをプッシュするスタックを維持するなど、他の解決策をいくつか検討しましたが、これはかなり複雑になる可能性があり、バインドされたメソッドをスタックにプッシュするのは嫌いです。また、実行するアクションごとにカウンターをインクリメントすることも検討し、最終的にカウンターに応じて必要なロールバックの種類を決定しますが、そのようなコードの保守性は苦痛になります.
「トランザクション」と「ロールバック」の検索で得たほとんどのヒットはDB関連であり、より一般的な種類のコードにはあまり適合しませんでした.この残虐行為を体系的に平坦化する方法について誰かが良い考えを持っていますか?