2009-11-05 15 views
30

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

+2

मुझे नहीं लगता कि "भाषा-अज्ञेयवादी" यहां मदद करता है: विभिन्न भाषाएं मूल रूप से अलग-अलग दृष्टिकोणों को निर्देशित करती हैं - आप सचमुच सी ++ में एक ही चीज़ नहीं करना चाहेंगे, रूबी कहें। –

+2

तो प्रति भाषा अलग प्रश्न पूछना फायदेमंद हो सकता है?फिर भी, मुझे लगता है कि पर्याप्त सामान्य पैटर्न हैं इसलिए एक सामान्य प्रश्न क्रम में है। – ripper234

+0

मैं इसके बजाय [निर्भरता इंजेक्शन दस्तावेज़] (http://stackoverflow.com/documentation/dependency-injection/topics) विषयों को देखने के लिए इस प्रश्न में योगदान करने में रुचि रखने वाले किसी को भी प्रोत्साहित करता हूं। – dimo414

उत्तर

1

मुझे पता चला है कि जब मुझे Law of Demeter का उल्लंघन दिखाई देता है तो यह एक संकेत है कि मैं निर्भरता इंजेक्शन चाहता हूं।

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

void doit() 
{ 
    i += object.anotherobject.addvalue; //violation of Law of Demeter 
} 

कभी कभी संकेत है कि मैं इंजेक्षन anotherobject निर्भरता चाहते हो सकता है।

+0

थोड़ा मनमाना लगता है ... –

+2

यह कुछ समझ में आता है, हालांकि एक छलांग है, और अपूर्ण है। यदि आपको डेमेटर के कानून का उल्लंघन मिलता है, तो आपको अमूर्त चुनने का अवसर मिलता है। जब भी आप सार करते हैं, तो आपके पास इसे स्वयं बनाने के बजाय निर्भरता को इंजेक्ट करने का अवसर होता है। तो यह एक संकेतक है, लेकिन केवल बस। इस से अधिक अमूर्त के संभावित अवसर हैं, और उन जगहों पर DI से बचने के लिए उपयोगी हो सकता है जहां इसे लागू करने के लिए अधिक खर्च होता है, इससे संभवतः आप इससे बाहर निकल सकते हैं। फिर भी, +1 हालांकि। –

0

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

मुझे लगता है कि एक ही परत के भीतर DI का उपयोग करना एक अच्छा विचार नहीं है क्योंकि मुख्य रूप से परत को कसकर जोड़ना चाहिए, क्योंकि वे संबंधित हैं, जब तक कि आपके पास कोई उपयोगकर्ता कहानी न हो जो इसे उपयोगी बनाती है।

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

लेकिन, जब तक कि कुछ दबाए जाने की ज़रूरत नहीं है, मुझे लगता है कि एक ही परत के भीतर DI एक अनावश्यक जटिलता है।

+2

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

+0

मुझे लगता है कि यह होने की अपेक्षा अधिक जटिल हो रहा है, लेकिन यह परत पर क्या है इस पर निर्भर करता है। मैं परतों के बीच बस ऐसा करता हूं, लेकिन यही कारण है कि मैंने समझाया कि एक परत के बीच ऐसा क्यों करना उपयोगी हो सकता है, बस कुछ ऐसा नहीं जो मैं सुझाऊंगा। –

3

मेरी राय में, धनजी प्रसन्ना की पुस्तक Dependency Injection दोनों शुरुआती और विशेषज्ञ दोनों सॉफ्टवेयर डिजाइनरों के लिए पढ़ा जाना चाहिए। यह सीधे आपके डीआई प्रश्नों से संबंधित है।

+4

एक और महान पुस्तक है [मार्क सेमैन से .NET में निर्भरता इंजेक्शन] (http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501)। – Steven

8

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

https://mtaulty.com/2009/08/10/m_11554/

एकता क्या है?

It’s a “dependency injection container”. 

अब, उस बिंदु पर लोगों पढ़ने का एक समूह इस कहेंगे "हाँ, हम जानते हैं कि और हम पहले से ही कारणों के लिए यह प्रयोग कर रहे हैं ए, बी, सी या हम उपयोग करने के लिए नहीं चुना है, एक्स, वाई, जेड के कारण "और मुझे कल्पना है कि अन्य लोगों का समूह कह सकता है;

“Huh? What’s a dependency injection container?” 

इस पोस्ट में बाद के लोगों के लिए है - यह संपूर्ण होने के लिए मतलब नहीं है, लेकिन उम्मीद है कि यह पूरी तरह से बेकार या तो :-)

3

Guice के user's guide में एक सर्वोत्तम प्रथाओं खंड नहीं है नहीं है।

संबंधित मुद्दे