Menurut Robert C. Martin, SRP menyatakan bahwa:
Seharusnya tidak ada lebih dari satu alasan bagi kelas untuk berubah.
Namun, dalam bukunya Clean Code , bab 3: Functions, ia menunjukkan blok kode berikut:
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);
}
}
Dan kemudian nyatakan:
Ada beberapa masalah dengan fungsi ini. Pertama, itu besar, dan ketika tipe karyawan baru ditambahkan, itu akan tumbuh. Kedua, sangat jelas melakukan lebih dari satu hal. Ketiga, itu melanggar Prinsip Tanggung Jawab Tunggal (SRP) karena ada lebih dari satu alasan untuk itu berubah . [penekanan milikku]
Pertama, saya pikir SRP didefinisikan untuk kelas, tetapi ternyata itu juga berlaku untuk fungsi. Kedua, bagaimana fungsi ini memiliki lebih dari satu alasan untuk berubah ? Saya hanya bisa melihatnya berubah karena perubahan pada Karyawan.