我很困惑如何确定一个方法是否只负责一项职责,就像书中的以下代码一样。
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呢?但当我进一步理解该方法时,我得出了一个假设,即由于该方法的名称是calculatePay(Employee e)
,因此该方法唯一的职责是进行付款计算,正如方法名所示,但由于在方法内部有一个用于过滤Employee类型的switch语句,这种过滤现在是另一种职责,因此违反了SRP。我不知道我的理解是否正确。
此外,每个员工类型的计算方法也可能会改变
。员工的计算方式如何影响该方法?由于每种类型只是调用一个方法来执行计算,我认为根据您的回答和书中给出的陈述,我可以假设我对原理的理解是正确的吗? - anathema