रॉबर्ट सी। मार्टिन के अनुसार, एसआरपी में कहा गया है कि:
एक वर्ग को बदलने के लिए एक से अधिक कारण कभी नहीं होने चाहिए ।
हालाँकि, अपनी पुस्तक क्लीन कोड , अध्याय 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);
}
}
और फिर कहता है:
इस फ़ंक्शन के साथ कई समस्याएं हैं। सबसे पहले, यह बड़ा है, और जब नए कर्मचारी प्रकार जोड़े जाते हैं, तो यह बढ़ेगा। दूसरा, यह बहुत स्पष्ट रूप से एक से अधिक काम करता है। तीसरा, यह एकल जिम्मेदारी सिद्धांत (एसआरपी) का उल्लंघन करता है क्योंकि इसके बदलने का एक से अधिक कारण है । [जोर मेरा]
सबसे पहले, मैंने सोचा कि एसआरपी को कक्षाओं के लिए परिभाषित किया गया था, लेकिन यह पता चला कि यह कार्यों के लिए भी लागू है। दूसरे, यह कैसे होता है कि इस फ़ंक्शन को बदलने का एक से अधिक कारण है ? मैं केवल कर्मचारी पर बदलाव के कारण इसे बदलते हुए देख सकता हूं।