Secondo Robert C. Martin, l'SRP afferma che:
Non ci dovrebbe mai essere più di un motivo per cambiare una classe .
Tuttavia, nel suo libro Clean Code , 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:
Esistono diversi problemi con questa funzione. Innanzitutto, è grande e quando vengono aggiunti nuovi tipi di dipendenti, crescerà. In secondo luogo, fa chiaramente più di una cosa. In terzo luogo, viola il principio di responsabilità singola (SRP) perché esiste più di una ragione per cambiare . [enfasi mia]
In primo luogo, ho pensato che l'SRP fosse definito per le classi, ma si scopre che è applicabile anche alle funzioni. In secondo luogo, in che modo questa funzione ha più di un motivo per cambiare ? Posso solo vederlo cambiare a causa di un cambiamento sul Dipendente.