Según Robert C. Martin, el SRP afirma que:
Nunca debe haber más de una razón para que una clase cambie.
Sin embargo, en su libro Clean Code , capítulo 3: Funciones, muestra el siguiente bloque de código:
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);
}
}
Y luego dice:
Hay varios problemas con esta función. Primero, es grande, y cuando se agreguen nuevos tipos de empleados, crecerá. Segundo, claramente hace más de una cosa. Tercero, viola el Principio de Responsabilidad Única (SRP) porque hay más de una razón para que cambie . [énfasis mío]
En primer lugar, pensé que el SRP estaba definido para las clases, pero resulta que también es aplicable a las funciones. En segundo lugar, ¿cómo es que esta función tiene más de una razón para cambiar ? Solo puedo verlo cambiar debido a un cambio en Empleado.