根据Robert C. Martin所说,SRP指出:
改变班级的理由不应该只有一个以上。
但是,在他的《清洁代码》第3章:函数中,他显示了以下代码块:
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的变化而改变。