根据 Robert C. Martin 的说法,SRP 规定如下:
然后声明:
这个函数有几个问题。首先,它很大,在添加新的雇员类型时会变得越来越庞大。其次,它显然做了不止一件事情。第三,由于有不止一个原因导致它需要改变,它违反了单一职责原则(SRP)。[强调是我的]
首先,我认为SRP是为类定义的,但事实证明它也适用于函数。其次,这个函数有何种“不止一个原因需要改变”的情况?我只能看到它因为Employee的改变而改变。
然而,在他的书《Clean Code》第三章“函数”中,他展示了以下代码块:一个类的变化原因不应该超过一个。
public Money calculatePay(Employee e) throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
然后声明:
这个函数有几个问题。首先,它很大,在添加新的雇员类型时会变得越来越庞大。其次,它显然做了不止一件事情。第三,由于有不止一个原因导致它需要改变,它违反了单一职责原则(SRP)。[强调是我的]
首先,我认为SRP是为类定义的,但事实证明它也适用于函数。其次,这个函数有何种“不止一个原因需要改变”的情况?我只能看到它因为Employee的改变而改变。