อ้างอิงจากโรเบิร์ตซี. มาร์ติน SRP ระบุว่า:
ไม่ควรมีเหตุผลมากกว่าหนึ่งข้อในการเปลี่ยนชั้นเรียน
อย่างไรก็ตามใน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);
}
}
แล้วสหรัฐฯ:
มีปัญหาหลายอย่างกับฟังก์ชั่นนี้ อย่างแรกคือมันมีขนาดใหญ่และเมื่อมีการเพิ่มประเภทพนักงานใหม่ก็จะเพิ่มขึ้น ประการที่สองมันชัดเจนมากกว่าสิ่งหนึ่ง ประการที่สามมีการละเมิด Single รับผิดชอบหลักการ (SRP) เพราะมีมากกว่าเหตุผลหนึ่งที่ทำให้มันมีการเปลี่ยนแปลง [เน้นเหมือง]
ก่อนอื่นฉันคิดว่า SRP ถูกกำหนดไว้สำหรับคลาส แต่กลับกลายเป็นว่ามันใช้ได้กับฟังก์ชั่น ประการที่สองฟังก์ชั่นนี้มีเหตุผลมากกว่าหนึ่งข้อในการเปลี่ยนแปลงอย่างไร ฉันเห็นได้ว่ามันเปลี่ยนไปเพราะการเปลี่ยนแปลงของพนักงาน