以下哪一项流程被视为良好做法?

时间:2015-11-12 09:14:41

标签: python python-2.7

假设我有处理两个流程的代码:

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

2 个答案:

答案 0 :(得分:0)

从代码冗余,代码维护,代码可重用性和单元测试的角度来看,方法3肯定比其他方法更好。

答案 1 :(得分:0)

假设方法#3是好方法,但您应该在代码中记录此决定。

尝试考虑一下需要更改一些专门针对flow_1或flow_2的1..3步骤的人 - 他如何轻松理解您今天针对flow_1和flow_2中的代码重复做出的决定。

是否应允许他将这些1..3步骤提取到flow_1和flow_2中并在其中一个流程中更改它们?