Secondo Robert C. Martin, l'SRP afferma che:
There should never be more than one reason for a class to change.
Tuttavia, nel suo libro Pulisci codice , capitolo 3: Funzioni, mostra il seguente blocco di codice:
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);
}
}
E poi afferma:
There are several problems with this function. First, it’s large, and when new employee types are added, it will grow. Second, it very clearly does more than one thing. Third, it violates the Single Responsibility Principle (SRP) because there is more than one reason for it to change. [emphasis mine]
In primo luogo, pensavo che l'SRP fosse definito per le classi, ma risulta che è applicabile anche alle funzioni. In secondo luogo, in che modo questa funzione ha più di un motivo per cambiare ? Posso vederlo solo cambiando a causa di un cambiamento in Employee.