जब एफर्टेंट / अफेयर कपलिंग अच्छा या बुरा होता है


11

मेरे पास इस सप्ताह एक सॉफ्टवेयर पैटर्न की परीक्षा है और हम जिन विषयों का अध्ययन करने वाले हैं, उनमें से एक एफर्ट और एफर्टेंट कपलिंग है।

मैं समझता हूं कि एक पैकेज में एक उच्च Ce (अपवाही युग्मन) होता है अगर यह कई अन्य प्रकारों पर निर्भर करता है।

उदाहरण के लिए:

class Car{
    Engine engine;
    Wheel wheel;
    Body body;
}

इस वर्ग में उच्च गति वाले कपलिंग होंगे क्योंकि यह इंजन, व्हील और बॉडी प्रकारों पर निर्भर करता है।

यदि टाइप "व्हील" में एक उच्च सीए (अभिवाही युग्मन) होता, अगर कई अन्य पैकेज उस पर निर्भर होते (कार, प्लेन, साइकिल)।

हमारी परीक्षा में संभावित प्रश्नों में से एक है, एफेरेंट / अफेयरेंट कपलिंग अच्छा या बुरा कब होता है? यह मुझे अजीब लगता है क्योंकि तार्किक रूप से एक कार्यक्रम के लिए उच्च एफ़रेंट / एफ़रेंट कपलिंग के साथ संकुल / कक्षाओं की आवश्यकता होगी।

क्या किसी के पास एक उदाहरण है कि कब / कहाँ उच्च अपवाही या अभिवाही युग्मन अच्छा / बुरा है ??

धन्यवाद !


4
यदि केवल वे और अधिक भ्रमित करने वाले शब्द
उठाते थे

जवाबों:


11

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

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

जब यह वास्तुकला / डिजाइन की बात आती है, तो आपको वास्तव में जो विचार करना है वह बहुत अधिक अंतहीन व्यापार हैं और ये मैट्रिक्स अलग नहीं हैं। यदि आप किसी चीज के अच्छे या बुरे होने का उदाहरण जानना चाहते हैं, तो "क्या अगर" गेम खेलें। एक उदाहरण की कल्पना करें और कहें कि "अगर मैं एक्स करना चाहता था - तो वह कितना चूसना होगा?" X के लिए जहां उत्तर "बहुत कुछ है", आपके पास एक नुकसान है और X के लिए जहां उत्तर "वह वास्तव में आसान होगा" आपको एक फायदा है।


5

सामान्यताओं में बोलते हुए, ढीली युग्मन:

सकारात्मक : सिस्टम के एक हिस्से को उस चीज़ में बदलाव से बचाता है जो उस पर निर्भर करता है (अभिवाही युग्मन)

नकारात्मक : रिश्ते को समझना अधिक कठिन हो सकता है

उदाहरण के लिए, यदि मैं HTTTP पर निर्भर एक प्रणाली विकसित कर रहा था, तो मैं तय करूंगा कि मुझे HTTP को कसकर या शिथिल करने की आवश्यकता है। अगर मुझे लगता है कि सिस्टम को एक अलग प्रोटोकॉल में बदलने की संभावना है, तो मैं इसके लिए कुछ हद तक जोड़े का चयन कर सकता हूं, जबकि अगर मैंने स्वीकार किया कि एचटीटीपी मेरा प्रोटोकॉल है, तो मैं समझने के लिए सादगी के लिए उस प्रोटोकॉल के लिए कुछ कस सकता हूं।

इस बात पर विचार करें कि WS * में कुछ जटिलताएं HTTP से प्रोटोकॉल के रूप में इसकी डिकॉप्लिंग में हैं।


स्मार्ट उत्तर, लेकिन मैं यह नहीं देखता कि यह कैसे प्रश्न से संबंधित है, जो कि अपवाही / अभिवाही युग्मन के बारे में था और तंग / ढीला युग्मन के बारे में नहीं था।
lbalazscs

आप सही हैं, @lbalazscs कोई सवाल नहीं क्यों मैं सवाल का जवाब दिए बिना जवाब दिया!
jayraynet

1

केंद्र पर पहुंचानेवाला

अगर कुछ अलग सामान का एक गुच्छा (उच्च संख्या में अभिवाही कपलिंग) का उपयोग करता है, तो उन चीजों में से किसी को बदलने पर यह टूटने का खतरा हो सकता है।

अस्थिरता = १

यहाँ छवि विवरण दर्ज करें

केंद्रत्यागी

अगर किसी चीज का इस्तेमाल अलग-अलग सामान (उच्च संख्या में अपक्षय युग्मों) के एक समूह द्वारा किया जाता है, तो इसे बदलने पर बहुत सी चीजों को तोड़ने का खतरा हो सकता है।

अस्थिरता = ०

यहाँ छवि विवरण दर्ज करें

स्थिरता

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

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

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

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

स्थिर सार सिद्धांत

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

पुन: प्रयोज्य बनाम पुन: उपयोग

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

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

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