Laut Robert C. Martin heißt es in der SRP:
Es sollte nie mehr als einen Grund geben, warum sich eine Klasse ändert.
In seinem Buch Clean Code , Kapitel 3: Functions, zeigt er jedoch den folgenden Codeblock:
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);
}
}
Und dann heißt es:
Es gibt verschiedene Probleme mit dieser Funktion. Erstens ist es groß, und wenn neue Mitarbeitertypen hinzugefügt werden, wird es wachsen. Zweitens macht es ganz klar mehr als eine Sache. Drittens verstößt es gegen das Einzelverantwortungsprinzip (Single Responsibility Principle, SRP), weil es mehr als einen Grund für eine Änderung gibt . [Hervorhebung von mir]
Erstens dachte ich, dass die SRP für Klassen definiert wurde, aber es stellt sich heraus, dass sie auch für Funktionen gilt. Zweitens, wie kommt es, dass diese Funktion mehr als einen Grund hat, sich zu ändern ? Ich kann nur sehen, dass es sich aufgrund eines Mitarbeiterwechsels ändert.