ロバートC.マーティンによると、SRPは次のように述べています。
クラスが変更される理由は1つだけです。
ただし、彼の本Clean Code、第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)に違反しています。[強調鉱山]
まず、SRPはクラスに対して定義されていると思いましたが、関数にも適用できることがわかりました。第二に、この関数には複数の変更理由がありますか?従業員の変更が原因で変更が確認できます。