इसका कोई स्पष्ट उत्तर नहीं है। यद्यपि यह प्रश्न संकीर्ण है, स्पष्टीकरण नहीं हैं।
मेरे लिए, यह कुछ ऐसा है जैसे ओसम का रेजर अगर आप चाहते हैं। यह एक आदर्श है जहां मैं अपने वर्तमान कोड को मापने की कोशिश करता हूं। इसे सरल और सरल शब्दों में नीचे करना मुश्किल है। एक और रूपक होगा »एक विषय« जो सार के रूप में है, अर्थात कठिन है, जैसा कि "एकल जिम्मेदारी" है। एक तीसरा विवरणक »अमूर्त के एक स्तर के साथ काम करना होगा«।
व्यावहारिक रूप से इसका क्या अर्थ है?
हाल ही में मैं कोडिंग की एक शैली का उपयोग करता हूं जिसमें अधिकतर दो चरण होते हैं:
चरण I को रचनात्मक अराजकता के रूप में वर्णित किया गया है। इस चरण में मैं कोड लिखता हूं क्योंकि विचार प्रवाहित होते हैं - यानी कच्चे और बदसूरत।
द्वितीय चरण पूर्ण विपरीत है। यह तूफान के बाद सफाई करने जैसा है। यह सबसे अधिक काम और अनुशासन लेता है। और फिर मैं एक डिजाइनर के दृष्टिकोण से कोड को देखता हूं।
मैं अब ज्यादातर पायथन में काम कर रहा हूं, जो मुझे बाद में वस्तुओं और कक्षाओं के बारे में सोचने की अनुमति देता है। प्रथम चरण I - मैं केवल फ़ंक्शन लिखता हूं और उन्हें विभिन्न मॉड्यूलों में यादृच्छिक रूप से फैलाता हूं। में द्वितीय चरण , के बाद मैं जा रहा चीजें मिल गया, मैं क्या मॉड्यूल सौदों जो समाधान का हिस्सा के साथ पर गहन चर्चा की है। और मॉड्यूल के माध्यम से स्किमिंग करते समय, मेरे लिए विषय उभर रहे हैं। कुछ फ़ंक्शन थीम से संबंधित हैं। ये कक्षाओं के अच्छे उम्मीदवार हैं । और मैंने कक्षाओं में कार्य करने के बाद - जो लगभग इंडेंटेशन के साथ किया है और self
पायथॉन में पैरामीटर सूची में जोड़ रहा है;) - मैं SRP
अन्य मॉड्यूल और कक्षाओं के लिए कार्यक्षमता को बाहर निकालने के लिए ओक्टम के रेजर की तरह उपयोग करता हूं ।
एक वर्तमान उदाहरण दूसरे दिन छोटी निर्यात कार्यक्षमता लिख सकता है ।
एक ज़िप में csv , एक्सेल और संयुक्त एक्सेल शीट की आवश्यकता थी ।
सादा कार्यक्षमता प्रत्येक को तीन दृश्यों (= कार्यों) में किया गया था । प्रत्येक फ़ंक्शन ने फ़िल्टर को निर्धारित करने के लिए एक सामान्य विधि और डेटा को पुनः प्राप्त करने के लिए एक दूसरी विधि का उपयोग किया। फिर प्रत्येक फ़ंक्शन में निर्यात की तैयारी हुई और सर्वर से प्रतिक्रिया के रूप में वितरित की गई।
अमूर्त के कई स्तर मिश्रित थे:
आई) आने वाले / बाहर जाने वाले अनुरोध / प्रतिक्रिया से निपटना
II) फिल्टर का निर्धारण
III) डेटा पुनर्प्राप्त करना
IV) डेटा का रूपांतरण
exporter
पहले चरण में II-IV परतों से निपटने के लिए आसान कदम एक अमूर्त ( ) का उपयोग करना था ।
केवल अवशेष अनुरोधों / प्रतिक्रियाओं से निपटने वाला विषय था । अमूर्त के एक ही स्तर पर अनुरोध पैरामीटर निकाल रहा है जो ठीक है। इसलिए मुझे इस एक "जिम्मेदारी" को देखना था ।
दूसरा, मुझे निर्यातक को तोड़ना था, जैसा कि हमने देखा कि अमूर्त की कम से कम तीन अन्य परतें शामिल थीं।
फ़िल्टर मानदंड और वास्तविक वापसी का निर्धारण लगभग एक ही स्तर पर किया जाता है (डेटा का सही सबसेट प्राप्त करने के लिए फ़िल्टर की आवश्यकता होती है)। इन स्तरों को डेटा एक्सेस लेयर की तरह कुछ में रखा गया था ।
अगले चरण में मैंने वास्तविक निर्यात तंत्र को अलग कर दिया: जहां एक लौकिक फ़ाइल में लिखने की आवश्यकता थी, मैंने उसे दो "जिम्मेदारियों" में तोड़ दिया: एक डेटा के वास्तविक लेखन के लिए डिस्क और दूसरा भाग जो वास्तविक प्रारूप से निपटा।
वर्गों और मॉड्यूलों के गठन के साथ, चीजें स्पष्ट हो गईं कि क्या कहां हैं। और हमेशा अव्यक्त प्रश्न, क्या वर्ग बहुत अधिक करता है ।
आप यह निर्धारित करते हैं कि प्रत्येक वर्ग के लिए कौन सी ज़िम्मेदारियाँ होनी चाहिए, और आप SRP के संदर्भ में एक ज़िम्मेदारी कैसे निर्धारित करते हैं?
इसका पालन करने के लिए एक नुस्खा देना कठिन है। अगर मैं मदद करता है तो निश्चित रूप से मैं गूढ़ »स्तर के« - नियम को दोहरा सकता था।
ज्यादातर मेरे लिए यह एक तरह का "कलात्मक अंतर्ज्ञान" है जो वर्तमान डिजाइन की ओर जाता है; मैं एक मॉडल कोड की तरह एक कलाकार मिट्टी की मूर्ति बना सकता हूं या पेंटिंग कर सकता हूं।
मुझे एक कोडिंग बॉब रॉस के रूप में कल्पना करो ;)