假设我有处理两个流程的代码:
if flow1:
do step 1
do step 2
do step 3
if flow 2:
do step 1
do step 2
do step 3
do step 4
do step 5
从我的角度来看,有三种方法可以解决这些问题:
接近1
def get_flow_type():
def do_flow_wrapper():
if flow_type = 1:
do_flow1()
elif flow_type = 2:
do_flow2()
def do_flow1()
do step 1
do step 2
do step 3
def do_flow2()
do step 1
do step 2
do step 3
do step 4
do step 5
接近2
def get_flow_type():
def do_flow_wrapper():
do step 1
do step 2
do step 3
if flow_type = 2:
do step 4
do step 5
接近3
def get_flow_type():
def do_flow_wrapper():
if flow_type = 1:
do_flow1()
elif flow_type = 2:
do_flow2()
def do_first_three_steps()
def do_flow1()
do_first_three_steps()
def do_flow2()
do_first_three_steps()
do step 4
do step 5
方法#1导致代码重复(步骤1,2和3)显示两次。
方法#2似乎是正确的方法。但是,这个函数做了两件事,我发现这种方法违反了“函数必须只做一件事”的规则(应该简单地反映在函数名中)。
方法3似乎结合了方法#1和#2,同时通过使用辅助函数来避免代码重复。
因此,方法3在避免代码重复方面被认为是最好的,同时保持代码易于调试(当函数执行多个操作时,即“如果x执行1,如果y执行2”则调试代码更难?
谢谢,
的Qwerty
答案 0 :(得分:0)
从代码冗余,代码维护,代码可重用性和单元测试的角度来看,方法3肯定比其他方法更好。
答案 1 :(得分:0)
假设方法#3是好方法,但您应该在代码中记录此决定。
尝试考虑一下需要更改一些专门针对flow_1或flow_2的1..3步骤的人 - 他如何轻松理解您今天针对flow_1和flow_2中的代码重复做出的决定。
是否应允许他将这些1..3步骤提取到flow_1和flow_2中并在其中一个流程中更改它们?