我想找到一个更好的方法来执行以下函数。我有一系列需要完成的步骤,如果有失败的话,我需要像这样撤销前一步:
try:
A = createA()
except:
return None
try:
B = createB(A)
except:
deleteA(A)
return None
try:
C = createC(B)
except:
deleteB(B)
deleteA(A)
return None
try:
D = createD(C)
except:
deleteC(C)
deleteB(B)
deleteA(A)
return None
return D
如果可能的话,我不想重复我的话。我该如何改进?有一个已知的模式可以遵循吗?你知道吗
我考虑过的一件事是将deleteB(
添加到deleteC()
,将deleteA()
添加到deleteB()
。这是最好的办法吗?你知道吗
这取决于“撤消”的确切含义。例如,如果A、B、C、D等是任意的用户命令,并且可能有大量的命令以任何顺序排列,那么您可能需要围绕do/undo编写某种抽象。你知道吗
如果A、B、C、D等是需要整理的资源(数据库连接、文件等),那么上下文管理器可能更合适。你知道吗
或者A,B,C,D是其他类型的东西。你知道吗
使用上下文管理器的简短代码:
正如评论所指出的,这就是上下文管理器协议的用途。但是,如果您还不想深入了解什么是相当高级的特性,那么您可以在运行时定义
lambda
匿名函数,以记住要整理的内容。。。你知道吗如果您查看一些设计模式,请检查以下内容:
Command pattern
这可能就是你正在寻找的。此外,它的命令可以有“撤消”操作。如果下面的问题与您的问题相似,也请检查。best design pattern for undo feature
相关问题 更多 >
编程相关推荐