Понимание принципа единой ответственностиJAVA

Программисты JAVA общаются здесь
Anonymous
Понимание принципа единой ответственности

Сообщение Anonymous »

Я совершенно не понимаю, как определить, выполняет ли один метод одну задачу, как в следующем коде из книги «Чистый код».

Код: Выделить всё

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

Вернуться в «JAVA»