सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल और कंसर्न ऑफ सेपरेशन के बीच अंतर


82

सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल और सेपरेशन ऑफ कंसर्न के बीच क्या अंतर है?


जवाबों:


39

सिंगल रिस्पांसिबिलिटी प्रिंसिपल (एसआरपी) - प्रत्येक वर्ग को बदलने का सिर्फ एक कारण दें; और "बदलने का कारण" == "जिम्मेदारी"। उदाहरण में: इनवॉइस क्लास के पास खुद को प्रिंट करने की जिम्मेदारी नहीं है।

सरोकारों का पृथक्करण (1974 से)। चिंता == प्रणाली की सुविधा। प्रत्येक चिंताओं का ख्याल रखना: प्रत्येक एक चिंता के लिए, अन्य चिंताएं अप्रासंगिक हैं। व्यवहार का कार्यान्वयन छिपाना।

से यहाँ


सिद्धांत रूप में एक ही है, लेकिन SoC अकेले अलगाव को हतोत्साहित करने के लिए प्रकट नहीं होता है। ओवरकेपलिंग के रूप में ओवरपैरेशन उतना बुरा नहीं है, लेकिन यह बुरा है, क्योंकि यह निर्माण की लागत और सॉफ्टवेयर को बनाए रखने में वृद्धि करता है (ओवरकूपिंग के रूप में एक ही समस्या - अलग-अलग कारण)। एसओसी दो बहुत महत्वपूर्ण सफलता कारकों की मांग करता है, कम से कम प्रति चाचा बॉब (1) 'चिंताएं' पहले व्यापार-स्तर (तकनीक नहीं) हैं; (२) अलग चीजें जो एक साथ होती हैं वह एक गलती है। blog.cleancoder.com/uncle-bob/2014/05/08/…
FastAl

17

मेरी राय में, सिंगल रिस्पांसिबिलिटी प्रिंसिपल एक है जो टूल्स / मुहावरों में से एक है जिससे सेपरेशन ऑफ कंसर्न को प्राप्त किया जा सके।


3
क्या? कोई आसानी से एक एप्लिकेशन बना सकता है जिसमें गैर-अतिव्यापी कार्यक्षमता (एसआरपी) होती है जिसमें कई ऑब्जेक्ट होते हैं जो गैर-अलग चिंताएं (एसओसी) होते हैं।
एंड्रयू सॉन्ग

6
लेकिन एक वस्तु की इमेजिंग के लिए बहुत कठिन है जिसमें कई जिम्मेदारियां हैं और अभी तक चिंताओं के सिद्धांत के अलगाव का पालन किया जाता है। दूसरे शब्दों में चिंताओं के वास्तविक पृथक्करण को प्राप्त करने के लिए (सभी स्तरों पर) एक बेहतर जिम्मेदारी सिद्धांत का पालन करें
बोस्टन an

17

एकल जिम्मेदारी सिद्धांत (एसआरसी बनाम एसआरपी बनाम) की चिंता

जुड़े हुए लेख से:

सरोकारों की जुदाई (SoC) - एक कंप्यूटर प्रोग्राम को अलग-अलग विशेषताओं में तोड़ने की प्रक्रिया है जो कार्यक्षमता में कम से कम संभव है। एक चिंता किसी कार्यक्रम में रुचि या ध्यान केंद्रित करने की है। आमतौर पर, चिंताएँ सुविधाओं या व्यवहारों का पर्याय होती हैं। http://en.wikipedia.org/wiki/Separation_of_concerns

सिंगल रिस्पांसिबिलिटी प्रिंसिपल (एसआरपी) - प्रत्येक ऑब्जेक्ट की एक जिम्मेदारी होनी चाहिए, और यह कि उसकी सभी सेवाओं को उस जिम्मेदारी के साथ संरेखित किया जाना चाहिए। कुछ स्तर पर सामंजस्य को एसआरपी का पर्याय माना जाता है। http://en.wikipedia.org/wiki/Single_responsibility_principle


4
इन परिभाषाओं के साथ, किस स्तर के सामंजस्य को एकल जिम्मेदारी सिद्धांत का पर्याय माना जाता है? मैंने पाया कि कई सामंजस्य के स्तर (उच्च से निम्न) हैं: संयोग, तार्किक, लौकिक, प्रक्रियात्मक और कार्यात्मक..in यह स्पष्टीकरण केवल "कार्यात्मक सामंजस्य" का मतलब है?
17

13

सिंगल रिस्पांसिबिलिटी में कहा गया है कि एक ऑब्जेक्ट एक यूनिट के काम के लिए जिम्मेदार है।

सरोकारों के अलगाव में कहा गया है कि अनुप्रयोगों को उन मॉड्यूल में विभाजित किया जाना चाहिए जिनकी कार्यक्षमता यथासंभव कम होती है।

इसी तरह के अंतिम परिणाम ... थोड़ा अलग अनुप्रयोग।


वस्तु और मॉड्यूल में क्या अंतर है? मेरे लिए एक मॉड्यूल एक क्लास है और एक ऑब्जेक्ट क्लास या क्लास की एक आवृत्ति है
Rookian

एक मॉड्यूल एक एप्लिकेशन में समान कार्यक्षमता का एक पूरा टुकड़ा हो सकता है ... कई वर्गों के बीच बातचीत से बना है (यदि आप एकल जिम्मेदारी संरक्षक का पालन कर रहे हैं तो प्रत्येक वर्ग के पास एक ही जिम्मेदारी है)।
जस्टिन निस्नेर

12

सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल एंड सेपरेशन ऑफ कंसर्न वास्तव में एक ही बात है।

ज़रूर आप दोनों के बीच किसी तरह के अंतर को छेड़ने की कोशिश में एक अकादमिक चर्चा में फंस सकते हैं, लेकिन क्यों? सभी इरादों और उद्देश्यों के लिए वे एक ही बात का वर्णन करते हैं। लोगों की सबसे बड़ी समस्या यह है कि वास्तव में एक "चिंता" और "जिम्मेदारी" क्या है, यह जानना चाहते हैं कि वे एसआरपी और एसओसी के पीछे महत्वपूर्ण विचार को याद करते हैं।

यह विचार बस अपने कोडबेस को शिथिल युग्मित पृथक भागों में विभाजित करने के लिए है। यह कई डेवलपर्स को एक-दूसरे को प्रभावित किए बिना अलग-अलग हिस्सों पर काम करने की अनुमति देता है, यह एकल डेवलपर को एक अलग-अलग हिस्से को दूसरे को तोड़ने के बिना संशोधित करने की अनुमति देता है।

यह मॉड्यूल स्तर पर लागू होता है, उदाहरण के लिए MVC SRP और SoC को बढ़ावा देने वाला एक वास्तुशिल्प पैटर्न है। कोडबेस को अलग-अलग मॉडल, विचार और नियंत्रक में विभाजित किया गया है। इस तरह एक दृश्य का संशोधन एक मॉडल के स्वतंत्र रूप से किया जा सकता है। दो दो को आपस में नहीं जोड़ा जाता है।

निचले स्तर पर इसे कक्षाओं में भी लागू किया जाना चाहिए। एक ही कक्षा में दर्जनों विधियाँ डालने के बजाय, कोड को कई में विभाजित करें। उसी कारणों से।

एक विधि स्तर पर भी, बड़े तरीकों को छोटे तरीकों में विभाजित करें।

सिद्धांत में। एसआरपी एक सिद्धांत है, एक नियम नहीं है, इसलिए आपको इसे धार्मिक रूप से चरम पर (पढ़ें: नहीं / नहीं) करना चाहिए। इसका मतलब यह नहीं है कि बहुत दूर जा रहा है और उदाहरण के लिए प्रत्येक कक्षा में केवल एक सात लाइन विधि है। इसका मतलब कोड को अलग-अलग हिस्सों में विभाजित करने का एक सामान्य सिद्धांत है। मुद्दा यह है कि यह एक बेहतर कोडबेस और अधिक स्थिर सॉफ्टवेयर को जन्म देगा।


8

चिंताओं का अलग होना (SoC)। अपने एप्लिकेशन को संभव के रूप में कार्यक्षमता में कम ओवरलैप के साथ अलग-अलग विशेषताओं में विभाजित करें। (Microsoft)।

"चिंता" = "अलग विशेषता" = "अलग अनुभाग"

"चिंता" उच्च और निम्न दोनों स्तरों पर काम करती है

एकल जिम्मेदारी सिद्धांत  कहता है कि प्रत्येक मॉड्यूल या वर्ग को सॉफ्टवेयर द्वारा प्रदान की गई कार्यक्षमता के एक हिस्से पर जिम्मेदारी होनी चाहिए, और उस जिम्मेदारी को पूरी तरह से कक्षा द्वारा समझाया जाना चाहिए। इसकी सभी सेवाओं को उस जिम्मेदारी के साथ संरेखित किया जाना चाहिए। (विकिपीडिया परिभाषा)

"जिम्मेदारी" = "बदलने का कारण" क्या बदलता है? "सॉफ्टवेयर द्वारा प्रदान की गई कार्यक्षमता का एक हिस्सा" = मूल इकाई

निष्कर्ष

  • एकल जिम्मेदारी सिद्धांत बुनियादी इकाइयों पर काम करता है -> निम्न स्तर पर काम करता है

  • चिंता का पृथक्करण उच्च और निम्न दोनों स्तरों पर काम करता है

  • एसआरपी और एसओसी चिंताओं को अलग करने के लिए एक साथ काम करते हैं। वे
    निम्न स्तर पर बिल्कुल समान हैं


एसआरपी विभिन्न स्तरों पर भी काम करता है, आपके पास पुस्तकालय स्तर पर एक सामान्य जिम्मेदारी है, जो कक्षा स्तर पर और फ़ंक्शन स्तर पर अधिक विशिष्ट है।
फिल 1970

7

चूंकि पिछले जवाबों में से कोई भी रॉबर्ट मार्टिन, जिन्होंने सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल नहीं बनाया था , मुझे लगता है कि यहां अधिक आधिकारिक जवाब की जरूरत है।

एसआरपी के लिए मार्टिन की प्रेरणा डेविड पर्नास, एग्जेर डीजकस्ट्रा (जिसने सेपरेशन ऑफ सेपरेशन शब्द को गढ़ा ) और लैरी कॉन्सटेंटाइन (जिन्होंने युग्मन और सामंजस्य की भूमिका निभाई ) से तैयार किया गया था। मार्टिन ने अपने विचारों को एसआरपी में समेकित किया।

एकल जिम्मेदारी सिद्धांत के लिए एक और शब्द है:

उन्हीं कारणों से एक साथ चीजों को इकट्ठा करें। उन चीजों को अलग करें जो अलग-अलग कारणों से बदलती हैं।

यदि आप इस बारे में सोचते हैं तो आपको महसूस होगा कि यह सामंजस्य और युग्मन को परिभाषित करने का एक और तरीका है। हम उन चीजों के बीच सामंजस्य बढ़ाना चाहते हैं जो समान कारणों से बदलते हैं, और हम उन चीजों के बीच युग्मन को कम करना चाहते हैं जो विभिन्न कारणों से बदलते हैं।

हालांकि, जैसा कि आप इस सिद्धांत के बारे में सोचते हैं, याद रखें कि परिवर्तन के कारण लोग हैं । यह परिवर्तन का अनुरोध करने वाले लोग हैं। और आप उन लोगों को या खुद को भ्रमित नहीं करना चाहते हैं, कोड को एक साथ मिलाकर कई अलग-अलग लोग विभिन्न कारणों से देखभाल करते हैं।

मूल प्रश्न के लिए, SRP और SoC के बीच मामूली अंतर यह है कि मार्टिन ने लोगों को संदर्भित करने के लिए चिंताओं को परिष्कृत किया ।


3

सरोकारों का अलग होना एक प्रक्रिया है; एकल जिम्मेदारी सिद्धांत एक डिजाइन / वास्तुकला दर्शन है। वे पूरी तरह से असंतुष्ट नहीं हैं, लेकिन वे विभिन्न उद्देश्यों की सेवा करते हैं।


2

इसी तरह लेकिन: एसओसी चिंताओं से संबंधित है: एक जटिल समस्या को कई चिंताओं में तोड़ने के लिए, एसआरपी के पास सिर्फ एक जिम्मेदारी है।


2

एसआरपी और एसओसी अमूर्त के विभिन्न स्तर पर काम करते हैं। उद्देश्य युग्मन को कम करने और सामंजस्य को मजबूत करने के लिए दोनों मामलों में है। जबकि SRP ऑब्जेक्ट स्तर पर अधिक काम करता है, SOC फ़ंक्शन स्तर के कार्यान्वयन पर भी काम कर सकता है। एक फ़ंक्शन को एक ऑब्जेक्ट द्वारा लागू किया जा सकता है, लेकिन कई ऑब्जेक्ट्स द्वारा भी। इसलिए दोनों सिद्धांतों के युग्मन और सामंजस्य में अंतर हो सकता है।


2

मैंने सेपरेशन ऑफ चिंताओं (SoC) और सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (SRP) के बीच तुलना करने की कोशिश की।

मतभेद

  • एसआरपी वर्ग स्तर पर है, लेकिन एसओसी प्रत्येक कंप्यूटर प्रोग्राम में है, अमूर्त ... या कभी-कभी वास्तु स्तर।

  • SRP आपके डोमेन को सामंजस्यपूर्ण वर्गों में विभाजित करने (कैसे नहीं) की गुणवत्ता के बारे में है जिनकी केवल एक जिम्मेदारी है (परिवर्तन का एक कारण)। दूसरी तरफ, एसओसी एक संदर्भ को अलग-अलग वर्गों में अलग करने के लिए एक डिज़ाइन सिद्धांत है, जैसे कि प्रत्येक अनुभाग एक अलग चिंता (क्या नहीं कैसे) को संबोधित करता है, क्योंकि बहुत सारे उपकरण हैं (उदाहरण के लिए कक्षाएं, फ़ंक्शन, मॉड्यूल, पैकेज,)। ..) इस लक्ष्य तक पहुंचने के लिए विभिन्न स्तरों।

  • एसआरपी की अवधारणा सामंजस्य (उच्च सामंजस्य) पर आधारित है, जबकि एसओसी आणविकता के करीब है, विभाजित और विजय (डी एंड सी), ... गर्भपात के प्रत्येक स्तर में।

  • SoC जटिलता का सामना करने के लिए एक अच्छा डिजाइन सिद्धांत है, जैसे कि अमूर्तता जबकि एकल जिम्मेदार वर्गों तक पहुंचने के लिए आप SoC सिद्धांत को एक महान समाधान के रूप में उपयोग कर सकते हैं। जैसा कि, यह जानने का एक तरीका है कि एक वर्ग के पास एक से अधिक ज़िम्मेदारी है यदि आप उस वर्ग से एक और ज़िम्मेदारी (चिंता) निकाल सकते हैं।

समानताएँ

  • इन सिद्धांतों में से प्रत्येक को लागू करने के बाद, आपका संदर्भ अधिक पुन: प्रयोज्य, रखरखाव योग्य, मजबूत, पठनीय, ... बन जाता है।

0

उत्तर:

चिंता (एसओसी) का पृथक्करण एक अधिक बहुमुखी शब्द है - यह सिस्टम स्तर पर या निम्न स्तर पर लागू किया जा सकता है जैसे कि कक्षाएं (या एक कक्षा के भीतर विधियां)

सिंगल रिस्पांसिबिलिटी प्रिंसिपल (एसआरपी) का उपयोग एक वर्ग में निचले स्तरों जैसे SoC पर चर्चा करने के लिए किया जाता है


इसके बारे में सोचने के तरीके:

  1. निम्न स्तर पर, SoC और SRP पर्यायवाची हैं। इसलिए आप कह सकते हैं कि SRP एक निरर्थक शब्द है - या कि SoC का उपयोग केवल सिस्टम स्तर पर चर्चा करने के लिए किया जाना चाहिए

  2. यह देखते हुए (1), SoC शब्द कुछ अस्पष्ट है। आपको यह जानने के लिए संदर्भ की आवश्यकता है कि चर्चा उच्च स्तरीय SoC या निचले स्तर SoC के बारे में है या नहीं

  3. यह याद रखने के लिए कि एसआरपी केवल निचले स्तरों का शब्द है, इस बारे में सोचें: रोजमर्रा की भाषा में, एक "जिम्मेदारी" आमतौर पर एक अच्छी तरह से परिभाषित चीज है जिसे विशिष्ट कोड से जोड़ा जा सकता है, जबकि "चिंताएं" आमतौर पर अस्पष्ट होती हैं और हो सकती हैं संबंधित चीजों का एक समूह शामिल है, जो शायद इसलिए कि एसआरपी की तुलना में सिस्टम स्तर पर चर्चा करने के लिए SoC एक अधिक प्राकृतिक फिट है

  4. एसओसी कुछ मायने में एसआरपी की तुलना में एक मजबूत आवश्यकता / सिद्धांत है क्योंकि यह सिस्टम स्तर पर लागू होता है, और सिस्टम स्तर पर सही मायने में हासिल करने के लिए सिस्टम घटकों के विकास में भी उपयोग किया जाना चाहिए। यानी, SoC का एक उच्च स्तर निम्न स्तरों पर सभ्य SoC / SRP का तात्पर्य करता है - लेकिन रिवर्स सही नहीं है, अर्थात, निम्न स्तर SoC / SRP, SoC या अगले उच्च स्तर के लिए बिल्कुल भी कुछ भी लागू नहीं करता है, कभी भी बुरा मत मानना इसमें शामिल प्रणाली। SoC / SRP के उदाहरण के लिए जिसे विधि स्तर पर हासिल किया जाता है, लेकिन फिर कक्षा स्तर पर उल्लंघन किया जाता है, इस Artur Trosin के ब्लॉग पोस्ट को देखें


0

चिंताओ का विभाजन

सेपरेशन ऑफ कंसर्न (एसओसी) सिद्धांत कहता है कि एक कोड विरूपण साक्ष्य को एक निश्चित पहलू पर किसी का ध्यान केंद्रित करने की अनुमति देनी चाहिए। एक कोड विरूपण साक्ष्य कुछ भी हो सकता है, एक विशिष्ट कार्य से, एक वर्ग, या एक पूरे पैकेज, या यहां तक ​​कि एक संपूर्ण अनुप्रयोग तक। एसओसी सिद्धांत को हर वास्तुशिल्प स्तर पर किसी के अनुप्रयोगों में लागू किया जा सकता है। आर्किटेक्चर का एक उदाहरण जहां एसओसी लागू किया जाता है वह एक स्तरित वास्तुकला है।

एकल जिम्मेदारी सिद्धांत

सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (एसआरपी) में कहा गया है कि "एक मॉड्यूल में एक होना चाहिए, और केवल एक, बदलने का कारण" (स्वच्छ वास्तुकला, मार्टिन, पृष्ठ 62)। SRP मॉड्यूल स्तर पर लागू होता है और SRP को लागू करते समय एक को बदलने के कारण पर ध्यान केंद्रित किया जाना चाहिए।

निष्कर्ष

एसओसी सिद्धांत कहता है कि एक कोड विरूपण साक्ष्य को एक निश्चित पहलू पर किसी का ध्यान केंद्रित करने की अनुमति देनी चाहिए। एसआरपी यह कहकर ठोस बनाता है कि मॉड्यूल स्तर पर हमें बदलाव के कारण पर अपना ध्यान केंद्रित करना चाहिए। इस प्रकार एसआरपी एक एसओसी है।

पूर्णता के लिए पुनश्च: सामान्य समापन सिद्धांत

कॉमन क्लोजर प्रिंसिपल (CCP) एसआरपी का एक उच्चतर स्तर, घटक स्तर पर एक प्रतिबंध है। CCP बताता है कि एक ही कारणों से और एक ही समय में परिवर्तन करने वाले वर्गों को समान घटकों में इकट्ठा किया जाना चाहिए (क्लीन आर्किटेक्चर, पी। 105)। CCP SOC का एक और उदाहरण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.