Я столкнулся с ситуацией, когда я работаю над фрагментом кода, в котором я командую изменениями на удаленном объекте (это тот, который я не могу дублировать для работы над клоном), а затем запрашиваю у удаленного объекта какой-тоработать в новом состоянии и отменить все внесенные в него изменения с помощью последовательности противоположных команд.Проблема в том, что если во время всех этих изменений я сталкиваюсь с ошибкой, я хочу иметь возможность откатить все сделанные мной до сих пор изменения.
Лучшее подходящее решение, которое мне пришло в голову, эторабочий процесс python try-finally, но он довольно проблематичен, когда последовательность команд длинная:
try:
# perform action
try:
# perform action
try:
# ...
finally:
# unroll
finally:
# unroll
finally:
# unroll
Таким образом, чем больше команд мне нужно, тем глубже мои отступы и вложенность и тем меньше мой код для чтения,Я рассмотрел некоторые другие решения, такие как поддержание стека, где для каждой команды я нажимаю действие отката, но это может быть довольно сложным, и мне не нравится вставлять связанные методы в стеки.Я также рассмотрел вопрос об увеличении счетчика для каждого действия, которое я выполняю, затем в отдельности окончательно определился с тем типом отката, который мне нужен, в зависимости от счетчика, но опять же, поддержка такого кода становится проблемой.
БольшинствоХиты, которые я получил при поиске «транзакций» и «отката», были связаны с БД и не очень хорошо подходили для более общего вида кода ... У кого-нибудь есть хорошая идея относительно того, как систематически сгладить это злодеяние?