Selon Robert C. Martin, le SRP déclare que:
Il ne devrait jamais y avoir plus d'une raison pour qu'une classe change.
Cependant, dans son livre Clean Code , chapitre 3: Fonctions, il montre le bloc de code suivant:
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);
}
}
Et puis déclare:
Il y a plusieurs problèmes avec cette fonction. Tout d'abord, il est important et lorsque de nouveaux types d'employés sont ajoutés, il augmentera. Deuxièmement, il fait très clairement plus d'une chose. Troisièmement, il viole le principe de responsabilité unique (PRS) car il y a plus d'une raison pour qu'il change . [c'est moi qui souligne]
Tout d'abord, je pensais que le SRP était défini pour les classes, mais il s'avère qu'il est également applicable aux fonctions. Deuxièmement, comment cette fonction a-t-elle plus d'une raison de changer ? Je ne peux que le voir changer en raison d'un changement d'employé.