Według Roberta C. Martina SRP stwierdza, że:
Klasa nigdy nie powinna mieć więcej niż jednego powodu do zmiany.
Jednak w swojej książce Clean Code , rozdział 3: Funkcje, pokazuje następujący blok kodu:
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);
}
}
A następnie stwierdza:
Istnieje kilka problemów z tą funkcją. Po pierwsze, jest duży, a po dodaniu nowych typów pracowników wzrośnie. Po drugie, bardzo wyraźnie robi więcej niż jedną rzecz. Po trzecie, narusza zasadę pojedynczej odpowiedzialności (SRP), ponieważ istnieje więcej niż jeden powód, aby ją zmienić . [moje podkreślenie]
Po pierwsze, myślałem, że SRP został zdefiniowany dla klas, ale okazuje się, że ma on również zastosowanie do funkcji. Po drugie, w jaki sposób ta funkcja ma więcej niż jeden powód do zmiany ? Widzę, że zmienia się tylko z powodu zmiany Pracownika.