एकल जिम्मेदारी कुछ ऐसी नहीं हो सकती है जो एक एकल फ़ंक्शन पूरा कर सकती है।
class Location {
public int getX() {
return x;
}
public int getY() {
return y;
}
}
यह वर्ग एकल जिम्मेदारी सिद्धांत को तोड़ सकता है। इसलिए नहीं कि यह दो कार्य है, लेकिन कोड अगर के लिए getX()
और getY()
विभिन्न हितधारकों कि बदलाव की मांग को पूरा करने के लिए है। यदि उपराष्ट्रपति श्री एक्स एक ज्ञापन के चारों ओर भेजते हैं कि सभी नंबरों को फ़्लोटिंग पॉइंट नंबरों के रूप में व्यक्त किया जाएगा और लेखा निदेशक श्रीमती वाई का कहना है कि उनके विभाग की समीक्षा के सभी नंबर पूर्णांक बने रहेंगे चाहे मिस्टर एक्स अच्छी तरह से सोचें तो यह वर्ग बेहतर था इसका एक भी विचार यह जिम्मेदार है क्योंकि चीजें भ्रमित करने वाली हैं।
यदि SRP का पालन किया गया है तो यह स्पष्ट होगा कि स्थान वर्ग श्री X और उसके समूह की चीजों के लिए योगदान देता है या नहीं। स्पष्ट करें कि कक्षा किसके लिए जिम्मेदार है और आप जानते हैं कि इस वर्ग पर कौन सा निर्देश प्रभाव डालता है। यदि वे दोनों इस वर्ग को प्रभावित करते हैं तो इसे खराब रूप से परिवर्तन के प्रभाव को कम करने के लिए डिज़ाइन किया गया था। "एक वर्ग को बदलने का केवल एक कारण होना चाहिए" इसका मतलब यह नहीं है कि पूरी कक्षा केवल एक छोटी सी चीज ही कर सकती है। इसका मतलब है कि मुझे कक्षा को देखने में सक्षम नहीं होना चाहिए और कहना चाहिए कि श्री एक्स और श्रीमती वाई दोनों को इस वर्ग में रुचि है।
इसके अलावा अन्य चीजें। नहीं, कई तरीके ठीक हैं। बस इसे एक नाम दें जो स्पष्ट करता है कि कक्षा में क्या विधियां हैं और क्या नहीं हैं।
अंकल बॉब SRP के बारे में अधिक है कोनवे की विधि से घुंघराले की विधि । अंकल बॉब क्युरी के नियमों को लागू करने की वकालत करते हैं (एक काम करते हैं) कक्षाओं को नहीं। एक साथ बदलने के लिए मिक्स कारणों के खिलाफ एसआरपी सावधान करता है। कॉनवे का नियम कहता है कि सिस्टम का पालन करेगा कि संगठन की जानकारी कैसे बहती है। यह एसआरपी का अनुसरण करता है क्योंकि आप इस बारे में परवाह नहीं करते हैं कि आपने कभी क्या नहीं सुना है।
"एक मॉड्यूल को एक, और केवल एक, अभिनेता के लिए जिम्मेदार होना चाहिए"
रॉबर्ट सी मार्टिन - स्वच्छ वास्तुकला
लोग दायरे को सीमित करने के लिए हर कारण के बारे में एसआरपी चाहते हैं। एसआरपी की तुलना में दायरा सीमित करने के और भी कारण हैं। मैं आगे के दायरे को सीमित करके कक्षा को एक एब्स्ट्रैक्शन बना सकता हूं जो एक ऐसा नाम ले सकता है जो यह सुनिश्चित करता है कि अंदर देखना आपको आश्चर्यचकित नहीं करेगा ।
आप कर्ली के नियम को कक्षाओं में लागू कर सकते हैं। आप बाहर हैं कि अंकल बॉब किस बारे में बात करते हैं लेकिन आप कर सकते हैं। जब आप गलत होते हैं, जब आप सोचना शुरू करते हैं कि एक फ़ंक्शन का मतलब है। यह सोचने जैसा है कि परिवार में केवल एक बच्चा होना चाहिए। एक से अधिक बच्चे होने से यह परिवार होने से नहीं रोकता है।
यदि आप एक कक्षा में घुंघराले नियम लागू करते हैं, तो कक्षा में सब कुछ एक एकल विचार के बारे में होना चाहिए। वह विचार व्यापक हो सकता है। विचार हठ हो सकता है। यदि कुछ लॉगिंग यूटिलिटी फ़ंक्शन हैं, तो वे स्पष्ट रूप से जगह से बाहर हैं। इससे कोई फर्क नहीं पड़ता कि श्री एक्स ही एकमात्र है जो इस कोड के बारे में परवाह करता है।
यहां लागू करने के लिए क्लासिक सिद्धांत को सेपरेशन ऑफ कंसर्न कहा जाता है । यदि आप अपनी सभी चिंताओं को अलग करते हैं तो यह तर्क दिया जा सकता है कि किसी एक जगह पर जो बचा है वह एक चिंता है। 1991 की फिल्म सिटी स्लीकर्स ने हमें घुंघराले चरित्र से परिचित कराया, इससे पहले हमने इस विचार को कहा।
यह ठीक है। यह सिर्फ इतना है कि चाचा बॉब एक जिम्मेदारी को क्या कहते हैं चिंता का विषय नहीं है। उस पर एक जिम्मेदारी कुछ आप पर ध्यान केंद्रित नहीं है। यह कुछ ऐसा है जो आपको बदलने के लिए मजबूर कर सकता है। आप एक चिंता पर ध्यान केंद्रित कर सकते हैं और फिर भी कोड बना सकते हैं जो विभिन्न एजेंडा वाले लोगों के विभिन्न समूहों के लिए जिम्मेदार है।
शायद आप उस बारे में परवाह नहीं करते हैं। ठीक। यह सोचकर कि "एक काम करो" को पकड़ लेने से आपके सभी डिज़ाइनों का समाधान हो जाएगा, "एक चीज़" के समाप्त होने की कल्पना की कमी दिखती है। दायरा सीमित करने का दूसरा कारण संगठन है। आप कई "एक चीज़" को दूसरे "एक चीज़" के अंदर घोंसला दे सकते हैं जब तक कि आपके पास हर चीज़ से भरा एक कबाड़ दराज न हो। मैंने इस बारे में बात की है से पहले
बेशक गुंजाइश को सीमित करने के लिए क्लासिक ओओपी कारण यह है कि वर्ग में निजी क्षेत्र हैं और फिर उस डेटा को साझा करने के लिए गेटर्स का उपयोग करते हैं, हम हर उस विधि को रखते हैं जिसमें उस डेटा की आवश्यकता होती है जहां वे निजी डेटा का उपयोग कर सकते हैं। कई लोग इसे एक सीमित सीमा के रूप में उपयोग करने के लिए भी प्रतिबंधक पाते हैं क्योंकि प्रत्येक विधि जो एक साथ होती है वह बिल्कुल उसी फ़ील्ड का उपयोग नहीं करती है। मैं यह सुनिश्चित करना पसंद करता हूं कि जो भी विचार डेटा को एक साथ लाए, वही विचार हो जो तरीकों को एक साथ लाए।
कार्यात्मक तरीका यह को देखने के लिए कि है a.f(x)
और a.g(x)
च बस रहे हैं एक (x) और जी एक (एक्स)। दो फ़ंक्शंस नहीं बल्कि एक साथ होने वाले फ़ंक्शंस की जोड़ियों का सिलसिला। इसमें a
डेटा होना भी नहीं चाहिए। यह केवल यह हो सकता है कि आप कैसे जानते हैं कि आप किस कार्यान्वयन f
और g
कार्यान्वयन का उपयोग करने जा रहे हैं। एक साथ बदलने वाले कार्य एक साथ होते हैं। यह अच्छा पुराना बहुरूपता है।
दायरा सीमित करने के कई कारणों में एसआरपी सिर्फ एक कारण है। यह बेहतर है। लेकिन केवल एक ही नहीं।