【发布时间】:2016-01-21 10:34:52
【问题描述】:
我很困惑如何确定一个方法是否有一个职责,就像清洁代码一书中的以下代码一样
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);
}
}
正如作者在这段代码 sn-p 中所说:“...显然不止一件事。 第三,它违反了单一职责原则(SRP),因为有多个 改变它的原因。”。乍一看代码,我在想,为什么该方法违反了 SRP,因为如果代码发生变化,只有当有一种添加的员工类型,但当我尝试进一步理解该方法时,我想出了一个假设,说明它为什么违反了上述原则。
我的假设是,由于该方法的名称是calculatePay(Employee e),因此该方法的唯一职责是支付计算,正如该方法的名称所暗示的那样,但是由于在该方法内部有一个过滤员工类型的开关过滤现在是一种不同的或另一种责任,因此违反了 SRP。不知道我说的对不对。
【问题讨论】:
标签: java design-patterns single-responsibility-principle