За словами Роберта К. Мартіна, СРП стверджує, що:
Ніколи не повинно бути більше ніж одна причина для зміни класу .
Однак у своїй книзі « Чистий код» , глава 3: Функції, він показує такий блок коду:
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);
}
}
А потім заявляє:
Існує кілька проблем з цією функцією. По-перше, він великий, а коли будуть додані нові типи працівників, він буде рости. По-друге, це дуже чітко робить більше ніж одне. По-третє, він порушує Принцип єдиної відповідальності (СРП), оскільки існує декілька причин для його зміни . [акцент мій]
По-перше, я думав, що SRP визначений для класів, але виявляється, це також застосовно до функцій. По-друге, як така функція має декілька причин для зміни ? Я бачу, як це змінюється лише через зміну працівника.