Код: Выделить всё
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), то единственная ответственность этого метода - вычисление платежа как название метода предполагает, но поскольку внутри метода есть переключатель фильтрации типа Сотрудника, эта фильтрация теперь является другой или другой ответственностью, что нарушает SRP. Не знаю, правильно ли я понял.
Подробнее здесь: https://stackoverflow.com/questions/332 ... -principle
Мобильная версия