आप दूसरों के लिए सरलीकरण की व्याख्या कैसे करते हैं?


33

यदि आपके पास कोई सहकर्मी है जो अलगाव की चिंताओं के लाभों को नहीं समझता है, या अपने दैनिक कार्य में लगातार लागू करने के लिए इसे पर्याप्त रूप से नहीं समझता है, तो आप इसे कैसे समझाएंगे?


विकिपीडिया पर कुछ अच्छे उदाहरण मिले: en.wikipedia.org/wiki/Separation_of_concerns
AliN11

जवाबों:


47

कल्पना कीजिए कि आपके पास एक कार्यक्रम है जो जारी किया गया है। एक ग्राहक साथ आता है और आपको इसकी एक विशेषता को बढ़ाने के लिए भुगतान करने की पेशकश करता है। धन प्राप्त करने के लिए, आपको नई सुविधा जोड़ने के लिए अपना कार्यक्रम बदलना होगा। कुछ चीजें जो आपके लाभ मार्जिन को प्रभावित करती हैं:

  1. आपको कितना कोड बदलना है
  2. परिवर्तन करना कितना आसान है
  3. आप मौजूदा सुविधाओं को तोड़ने की कितनी संभावना है जो अन्य ग्राहकों द्वारा उपयोग की जा रही हैं
  4. आप मौजूदा मॉडल / वास्तुकला का कितना उपयोग कर सकते हैं

चिंताओं का पृथक्करण आपको इन प्रश्नों के अधिक सकारात्मक उत्तर प्राप्त करने में मदद करता है।

  1. यदि एप्लिकेशन के किसी विशेष व्यवहार के लिए सभी कोड अलग कर दिए गए हैं, तो आपको केवल कोड को सीधे अपनी नई सुविधा के साथ बदलना होगा। जिसे बदलने के लिए कम कोड होना चाहिए।
  2. यदि आप जिस व्यवहार में रुचि रखते हैं, उसे शेष अनुप्रयोग से बड़े करीने से अलग किया जाता है, तो यह संभव है कि आप एक नए कार्यान्वयन में स्वैप कर पाएंगे और बाकी कार्यक्रम को पूरी तरह से समझने या हेरफेर किए बिना। यह पता लगाना भी आसान होना चाहिए कि आपको कौन सा कोड बदलना है।
  3. जिस कोड को आपको बदलना नहीं है, वह आपके द्वारा किए गए कोड की तुलना में टूटने की संभावना कम है। तो चिंताओं को विभाजित करने से आपको असंबंधित सुविधाओं में टूट-फूट से बचने में मदद मिलती है, जिससे आपको कोड बदलने से रोका जा सकता है जिसे वे कॉल कर सकते हैं। यदि आपकी विशेषताओं को एक साथ मिलाया जाता है, तो आप किसी दूसरे को बदलने की कोशिश करते समय दुर्घटना से एक के व्यवहार को बदल सकते हैं।
  4. यदि आपका आर्किटेक्चर तकनीकी या व्यावसायिक तर्क विस्तार के लिए अज्ञेय है तो कार्यान्वयन में बदलाव के लिए नई वास्तुकला सुविधाओं की आवश्यकता कम होती है। उदाहरण के लिए, यदि आपका मुख्य डोमेन तर्क डेटाबेस अज्ञेयवादी है, तो एक नए डेटाबेस का समर्थन उतना ही आसान होना चाहिए, जितना दृढ़ता परत के नए कार्यान्वयन में स्वैप करना।

1
मुझे लगता है कि आपने वित्तीय वास्तविकता में दृढ़ता से जवाब दिया। प्रबंधकों के पास मैला होने का कोई बहाना नहीं है और इस मौलिक अवधारणा को अनदेखा करते हैं।
मूडबॉम

10

एक अस्पताल को देखें, और उन सभी विभिन्न भूमिकाओं के बारे में सोचें जो एक मरीज को देखभाल प्रदान करने में शामिल हैं: ट्राइएज नर्स, डॉक्टर, मेडिकल असिस्टेंट, टेक, क्लेरिकल स्टाफ, कैफेटेरिया, आदि।

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


5

यदि वह किसी कार्यालय में काम करता है, तो इसे एक उदाहरण के रूप में लें, उस कार्यालय के प्रत्येक कर्मचारी की भूमिका की व्याख्या करें, और उससे पूछें, यदि उन कर्मचारियों को उनकी नौकरियों के अनुसार विभाजित नहीं किया जाता है, तो क्या होगा?


1

मैं देखूंगा कि वह अपने कोड / डिजाइन में SoC को लागू करने में कैसे विफल हो गया और इसे वास्तविक दुनिया के उदाहरण में बदल दिया, जिसके साथ वह संबंधित हो सकता है और यह स्पष्ट रूप से अवांछित है।

उदाहरण के लिए, यदि उसके पास एक ऐसा वर्ग है, जहाँ ग्राहक को उन ग्राहकों के लिए जानकारी के कई टुकड़ों की आपूर्ति करने की आवश्यकता होती है, जो प्रासंगिक नहीं हैं, तो मैं एक बेकरी की सादृश्य का उपयोग करूँगा जहाँ आपको अपना अनाज और खमीर लाना होगा यदि आप खरीदना चाहते हैं ब्रेड।


-3

एक उदाहरण एक HTML डेवलपर हो सकता है जो html, css और जावास्क्रिप्ट को अलग-अलग फाइलों में अलग करना चाहता हो। इस तरह से आप किसी चीज़ के लुक और फील को बदल सकते हैं, बस css को संशोधित कर सकते हैं या किसी चीज़ के व्यवहार को बदलकर जावास्क्रिप्ट फ़ाइल को अलग से लोड किया जाता है। यदि आपके पास एक उत्तरदायी या अनुकूली साइट है तो यह प्रतिमान अच्छी तरह से काम करता है क्योंकि आप एक उपयोगकर्ता व्यूपोर्ट या उपयोगकर्ता एजेंट के आधार पर विभिन्न सीएसएस या जावास्क्रिप्ट लोड कर सकते हैं। हालाँकि अगर आप html या टेम्पलेट को संशोधित करते हैं, तो संभावना है कि या तो सीएसएस या जावास्क्रिप्ट टूट सकता है। ये अलग-अलग चिंताएं भी निर्भर कर सकती हैं।

एक अन्य तरीका यह है कि अपने सभी सीएसएस जावास्क्रिप्ट और HTML को घटकों या मॉड्यूल के समूह में बाँध लें। इसका मतलब है कि आप एक मॉड्यूल में परिवर्तन कर सकते हैं और यह उस पृष्ठ पर अन्य घटकों या मॉड्यूल को प्रभावित नहीं करना चाहिए जो इसके साथ चलता है जो संबंधित नहीं हैं। यहाँ css, js और html फाइल्स को एक ही कंपोनेंट में मर्ज किया जाता है जिसे यूनिट टेस्ट किया जा सकता है। तो चिंताओं का पृथक्करण व्यक्तिगत परमाणु घटकों के रूप में आता है जिन्हें मार्कअप, स्टाइल और व्यवहार तत्वों के अलगाव के बजाय इकाई परीक्षण किया जा सकता है। यह दूसरा दृष्टिकोण अधिक जटिल वेब एप्लिकेशन बनाने के लिए अधिक अनुकूल है।

संपादित करें। चूंकि मुझे इस टिप्पणी पर नकारात्मक प्रतिक्रिया मिली है, मुझे लगा कि मैं इसे फिर से देखूंगा और अपने कुछ पोव को योग्य बनाने का प्रयास करूंगा। दुर्भाग्य से यहां कोई भी प्रतिक्रिया विशेष रूप से रचनात्मक नहीं है, लेकिन मैंने एक दिलचस्प चर्चा कहीं और देखी, जो रिएक्ट को देखता है, वेब विकास में वर्तमान गर्म तकनीक, एक वास्तविक दुनिया का उदाहरण है, और पूछता है कि क्या यह चिंताओं को अलग करता है या विशेष रूप से अगर यह एक को तोड़ता है सिद्धांत के पंख के ठोस वस्तु उन्मुख डिजाइन पद्धति।

तकनीकी जावास्क्रिप्ट डेवलपर परिप्रेक्ष्य

NO, because JSX is a view language. That's one responsibility.
BUT, this implies that the JS developer is self-enforcing SoC/SRP on his own      architecture by not mixing ViewModel concerns in his JSX. This type of vigilance "in the wild" is highly suspect because JSX involves the full JavaScript dialect.

UX / UI डिज़ाइनर परिप्रेक्ष्य

YES, because JSX mixes Semantic Content (Model) with Behavior (Controller)
YES, because the intrusion, specifically of JavaScript, into the Semantic Model makes it difficult or impossible for me to play my role and leverage my expertese and skills.

टीम परिप्रेक्ष्य

NO, if both...
Separate files are used for the View (JSX) and ViewModel (JS).
Either there aren't UI/UX/Designers involved, or they are productive working    directly with JSX (not very common).
YES, if either...
Everything is in the same file, causing problems for version control or productive use of modern editors.
Members of the team who are comfortable with HTML/CSS but less capable with JavaScript are excluded because of mixture or roles.

https://hashnode.com/post/does-react-really-violate-separation-of-concern-by-putting-html-and-js-in-a-single-file-cil3bn5hj0011a65347rsdut0

पेज पर भी फेसबुक के पीट हंट से एक दिलचस्प प्रस्तुति का लिंक है, जहां वह घटकों के बारे में बात करता है न कि टेम्पलेट, और रूपरेखा के चिंताओं को अलग करने के बजाय भाषा अनुप्रयोग में चिंताओं को अलग करता है, अर्थात टेम्प्लेट, सीएसएस और जावास्क्रिप्ट। आदि।

अपने आवेदन की भाषा में अपनी चिंताओं को अलग करने के संबंध में यह आपके पैटर्न को अलग-अलग करने या अपने कोड को मॉड्यूलर रूप में अलग करने के लिए उपयोग कर सकता है जिसमें यूनिट परीक्षण किया जा सकता है आदि।

इसलिए संक्षेप में, चिंताओं को अलग करना आपकी भूमिका या दृष्टिकोण पर निर्भर कर सकता है, जैसा कि और कहीं उल्लेख किया गया है।


1
इससे पहले किए गए 7 से अधिक अंकों के बारे में कुछ भी स्पष्ट नहीं लगता है और पहले के 7 जवाबों में समझाया गया है
gnat

मैं सिर्फ इशारा कर रहा हूं कि अलग-अलग चिंताएं संदर्भ के आधार पर अलग-अलग दृष्टिकोण ले सकती हैं। यह सॉफ्टवेयर इंजीनियरिंग के terns में एक वास्तविक दुनिया की स्थिति के करीब है और मैं इस बात पर प्रकाश डाल रहा हूं कि HTML पृष्ठों पर काम करते समय आप अलग-अलग दृष्टिकोण अपना सकते हैं जो पहले विरोधाभासी लग सकते हैं।
डैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.