According to the book "Clean Code" on page 38, the following lines of code violate the single responsibility principle. However, I cannot understand how there are "multiple" reasons for it to change?
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);
}
}
It seems to me that the purpose of this class is singular: to calculate the pay of commissioned, hourly, or salaried employees--and these three functions are at the same level of abstraction and one level below the top-most CalculatePay()
. Is he referring to the fact that more employee types might be added?
Given this, it is easy to notice that other reasons for change are removal and rename of existing types. Since function also involves
– gnat Sep 11 '15 at 21:06InvalidEployeeType
, it would have to change if something is changed in this exception, like rename or change in constructor arguments.