कैसे भरोसेमंद इंजेक्शन युग्मन बढ़ाता है?


32

निर्भरता इंजेक्शन पर विकिपीडिया पृष्ठ पर , नुकसान अनुभाग हमें यह बताता है:

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

निर्भरता इंजेक्शन के खिलाफ एक लेख के लिंक के साथ ।

निर्भरता इंजेक्शन कंक्रीट कार्यान्वयन के बजाय एक वर्ग इंटरफ़ेस का उपयोग करता है। घटे हुए युग्मन में परिणाम होना चाहिए , नहीं?

मुझे किसकी याद आ रही है? कक्षाओं के बीच निर्भरता इंजेक्शन बढ़ती युग्मन कैसे है?


2
मुझे यकीन नहीं है कि नुकसान की उस सूची को किसने लिखा था, लेकिन मैं इसे नमक के दाने के साथ ले जाऊंगा। उदाहरण के लिए, मैंने देखा है कि DI एक कोड आधार का आकार 2/3 घटाकर एक टन निरर्थक सेट-अप कोड को समाप्त कर देता है।
रॉब

@RobY मैंने ज्यादातर निर्भरता को इंजेक्ट करने के लिए कारखाने का उपयोग किया, और मेरा अनुभव यह है कि यह कोड आकार बढ़ाता है, लेकिन परीक्षण को सरल करता है।
22 .Ј। .ЈЈ 'Ј

रजिस्ट्री या प्रसंग पासिंग जैसे विकल्प का उपयोग करने का प्रयास करें;) या अन्य कोड जो सिर्फ वस्तुओं को त्वरित करता है और फिर उनके गुणों को विन्यास से खींचता है। मुख्य रूप से, मैं अब और 15 साल पहले के बीच के अंतर के बारे में बात कर रहा हूं।
रोब

संबंधित: stackoverflow.com/a/9503612/264697 । मार्क सीमन का जवाब बताता है कि डिपेंडेंसी इंजेक्शन का उपयोग करके समग्र युग्मन को कैसे कम किया जाता है।
स्टीवन

जवाबों:


42

तो मुझे क्या याद आ रही है?

निर्भरता इंजेक्शन एक वर्ग और उसकी निर्भरता के बीच युग्मन को कम करता है। लेकिन यह एक वर्ग और उसके उपभोक्ता के बीच युग्मन को बढ़ाता है (चूंकि उपभोक्ता को इसे बनाने के लिए अधिक जानकारी की आवश्यकता होती है) और निर्भरता और उसके उपभोक्ता (चूंकि उपभोक्ता को उपयोग करने के लिए निर्भरता जानना आवश्यक है)।

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


सही, युग्मन एक तरह से कम हो जाता है और दूसरा बढ़ जाता है।
पॉल ड्रेपर

लेकिन उपभोक्ता इसे नहीं बनाता है; बल्कि यह बात है।
केसी

@emodendroket - एह? नियंत्रण के उलटने से उपभोक्ता इसे नहीं बना सकता है। निर्भरता इंजेक्शन ऑर्थोगोनल है।
तेलस्टिन

ठीक है, आप एक अंतर बना रहे हैं जिससे मैं परिचित नहीं हूं, क्योंकि आमतौर पर शब्दों का इस्तेमाल परस्पर किया जाता है।
केसी

22

मान लीजिए कि आपके पास एक सबसिस्टम है Sजो डेटाबेस कनेक्शन पर निर्भर करता है D। निर्भरता इंजेक्शन के बिना, वहाँ के बीच एक अपेक्षाकृत तंग युग्मन है Sऔर Dक्योंकि, Sजरूरतों दोनों कैसे उपयोग करने के लिए पता करने के लिए Dऔर इसे बनाने का तरीका। बाकी प्रणाली, हालांकि, इस Sऔर के बीच निर्भरता से अनभिज्ञ हो सकती है D

निर्भरता इंजेक्शन के साथ, के बीच युग्मन Sऔर Dशिथिल हो जाता है, क्योंकि आप Sज्ञान से हटाते हैं कि कैसे बनाएं DSबस यह जानने की जरूरत है कि इसका उपयोग कैसे किया जाए। बढ़ी हुई समग्र युग्मनता इस तथ्य से आती है कि सिस्टम के अन्य हिस्सों को अब इसके बारे में जानने की आवश्यकता है Dऔर संभवत: एक कैसे बनाएं। युग्मन में इस वृद्धि की सीमा इस बात पर निर्भर करती है कि किस प्रकार पर निर्भरता Dइंजेक्ट की जाती है S:

  • साथ निर्माता इंजेक्शन के निर्माता Sजरूरतों पर निर्भरता Dऔर संभवतः ज्ञान कैसे एक बनाने के लिए।
  • साथ विधि-स्तरीय इंजेक्शन , की एक विधि के प्रत्येक फोन करने वाले Sके माध्यम से जो एक Dइंजेक्शन हो जाता जरूरतों पर निर्भरता Dऔर संभवतः ज्ञान कैसे एक बनाने के लिए।

या तो मामले में, कक्षाओं की संख्या Dबढ़ जाती है और ज्ञान कैसे Dअभी भी बनाने के लिए सिस्टम में कहीं मौजूद होने की जरूरत है। इससे युग्मन की समग्र वृद्धि होती है।


ठीक है, यह कंस्ट्रक्टर और सेटर इंजेक्शन के लिए समझ में आता है। लेकिन अगर कोई फैक्ट्री या रणनीति पैटर्न का उपयोग करता है, तो निर्माण को वहां स्थानांतरित कर दिया जाता है, और वर्ग केवल इंजेक्शन वाली वस्तु का उपयोग करता है। या, यह निर्भरता इंजेक्शन (नियंत्रण का केवल उलटा) नहीं है?
B46овиЈ

यहां तक ​​कि कारखाने के इंजेक्शन के साथ, निर्माता को Sएक कारखाने की आपूर्ति करने की आवश्यकता होती है D, जिसका अर्थ है कि यह जानना आवश्यक है कि इसका Sउपयोग D(या कम से कम कुछ इंटरफ़ेस)।
इदं आर्ये जुं

7

मैं दृढ़ता से असहमत हूं कि यह युग्मन को बढ़ाता है।

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

निर्भरता इंजेक्शन के साथ आपने निर्भरता के कार्यान्वयन से उप प्रणाली को डिकूप किया है।

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

कंस्ट्रक्टर इंजेक्शन:

निर्भरता समाधान एक निर्भरता इंजेक्शन कंटेनर या एक कारखाने द्वारा नियंत्रित किया जाता है। उपभोक्ता निर्भरता इंजेक्शन कंटेनर या एक कारखाने से उप प्रणाली का एक ठोस कार्यान्वयन प्राप्त कर सकता है।

उपभोक्ता को यह जानने की आवश्यकता नहीं है कि उप प्रणाली का निर्माता भी कैसा दिखता है। उप प्रणाली निर्भरता के लिए कोई युग्मन नहीं है।

विधि इंजेक्शन:

कंस्ट्रक्टर इंजेक्शन के रूप में उसी के अलावा अब उपभोक्ता को कंटेनर या कारखाने से निर्भरता का एक ठोस उदाहरण प्राप्त करने की आवश्यकता है (या यहां तक ​​कि यह विधि / निर्माता इंजेक्ट है) और इसे विधि में इंजेक्ट करें। फिर से, उपभोक्ता निर्भरता के एक ठोस कार्यान्वयन के लिए युग्मित नहीं है।

टीएल; डीआर सिस्टम में निर्भरता इंजेक्शन के लिए सबसे खराब मामला यह है कि कपलिंग को उपभोक्ता कोड में स्थानांतरित कर दिया जाता है। वहाँ कूप में कोई वृद्धि बढ़ रही है।

सबसे अच्छा मामला यह है कि सभी सिस्टम अब शिथिल युग्मित हैं और निर्भरता इंजेक्शन निर्भरता इंजेक्शन कंटेनर या कारखानों के माध्यम से नियंत्रित किया जाता है।

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