我正在尝试重构一些类似于以下内容的 Python 代码:-
1) if condition1:
2) lookupID = showSomeModalForm()
3) result = dbLookUp(lookUpID)
if result == 3:
doSomething(result)
value = showSomeModalForm2()
elif condition2:
id = showSomeModalForm()
doSomethingInDB(id)
id = 0
目前,如您所见,有几个地方显示了模态表单 - 只要模态表单返回相关 if(嵌套 if)执行下的代码。因此,例如,只要第 2) 行返回第 3) 行,就会执行
我参与了一些工作,这意味着在某些情况下代码将是同步的,并像现在一样显示为模态形式,但在其他情况下它将是异步调用。
首先,我已将所有对 showModalForm* 的调用替换为指向一个名为 askForInput 的回调函数,如下所示。askForInput 将在同步和异步情况下实现。
def refactor(self):
4) if condition1:
5) lookupID = askForInput()
6) result = dbLookUp(lookUpID)
7) if result == 3:
8) doSomething(result)
9) value = askForInput()
10) value += 2
10) elif condition2:
11) id = askForInput()
12) doSomethingInDB(id)
13) id = 0
如果代码是同步的,这可以正常工作,因为代码将执行第 1 行)假设条件 1 为真,它将执行第 2 行),一旦选择了某些内容,它将执行第 3 行)
由于这是遗留代码,这组 if(嵌套 if)编码了许多需要保留的逻辑,如果对 askForInput 的调用是异步的,我不确定如何重构它。例如,如果在第 5 行进行了异步调用),我希望它返回到重构方法并在第 6 行恢复执行)。如果异步调用在第 9 行),我希望代码在第 10 行恢复),而 11)将转到 12)。
最初,我认为我可以使用回调并发送重构方法作为参数来做到这一点 - 但是这将在顶部开始执行,我想要做的几乎是暂停保持重构方法的状态调用 askForInput 方法和将控制权返回到调用 askForInput 的正下方的重构方法。
阅读周围,我开始认为这可能与生成器和协同程序有关,但我不确定我是否找错了树。
任何有关如何重构的帮助都将不胜感激。
提前致谢。