मैं निर्भरता इंजेक्शन में अपेक्षाकृत अकुशल हूं, और मैं डीआई का उपयोग करते समय क्रमशः उपयोग करने और इससे बचने के लिए कुछ सर्वोत्तम प्रथाओं और विरोधी पैटर्न सीखना चाहता हूं।निर्भरता इंजेक्शन सर्वोत्तम प्रथाओं और विरोधी पैटर्न
उत्तर
मुझे पता चला है कि जब मुझे Law of Demeter का उल्लंघन दिखाई देता है तो यह एक संकेत है कि मैं निर्भरता इंजेक्शन चाहता हूं।
उदाहरण के लिए:
void doit()
{
i += object.anotherobject.addvalue; //violation of Law of Demeter
}
कभी कभी संकेत है कि मैं इंजेक्षन anotherobject
निर्भरता चाहते हो सकता है।
थोड़ा मनमाना लगता है ... –
यह कुछ समझ में आता है, हालांकि एक छलांग है, और अपूर्ण है। यदि आपको डेमेटर के कानून का उल्लंघन मिलता है, तो आपको अमूर्त चुनने का अवसर मिलता है। जब भी आप सार करते हैं, तो आपके पास इसे स्वयं बनाने के बजाय निर्भरता को इंजेक्ट करने का अवसर होता है। तो यह एक संकेतक है, लेकिन केवल बस। इस से अधिक अमूर्त के संभावित अवसर हैं, और उन जगहों पर DI से बचने के लिए उपयोगी हो सकता है जहां इसे लागू करने के लिए अधिक खर्च होता है, इससे संभवतः आप इससे बाहर निकल सकते हैं। फिर भी, +1 हालांकि। –
जब डि उपयोग करने के लिए के बारे में मेरे बुनियादी नियम है कि मैं परतों के बीच इंजेक्षन जाएगा, मेरे नियंत्रक और दाव के बीच तो एक परत हो सकता है, तो मैं, इंजेक्षन ताकि अगर मैं एक परत मैं यह कर सकते हैं बाहर नकली करना चाहते हैं कर सकते हैं।
मुझे लगता है कि एक ही परत के भीतर DI का उपयोग करना एक अच्छा विचार नहीं है क्योंकि मुख्य रूप से परत को कसकर जोड़ना चाहिए, क्योंकि वे संबंधित हैं, जब तक कि आपके पास कोई उपयोगकर्ता कहानी न हो जो इसे उपयोगी बनाती है।
उदाहरण के लिए, यदि आपका डीएओ अलग कंप्यूटर पर हो सकता है तो आपको यह दिखाने में सक्षम होना चाहिए कि वे एक परत हैं, लेकिन वास्तव में एक मशीन और अलग मशीनों के बीच स्विच करने के लिए DI का उपयोग करें। फिर डेवलपर एक मशीन पर सबकुछ कर सकता है और इसे अलग मशीनों पर काम करना चाहिए।
लेकिन, जब तक कि कुछ दबाए जाने की ज़रूरत नहीं है, मुझे लगता है कि एक ही परत के भीतर DI एक अनावश्यक जटिलता है।
अच्छी तरह से एक परत के भीतर निर्भरता इंजेक्शन का उपयोग करके आप मौजूदा घटक उदाहरणों का पुन: उपयोग करेंगे, संसाधनों का संरक्षण करेंगे। इसके अलावा मैं कहूंगा कि आप मॉड्यूलर डिज़ाइन को मजबूर कर अच्छी प्रोग्रामिंग आदतों को बढ़ावा दे रहे हैं। –
मुझे लगता है कि यह होने की अपेक्षा अधिक जटिल हो रहा है, लेकिन यह परत पर क्या है इस पर निर्भर करता है। मैं परतों के बीच बस ऐसा करता हूं, लेकिन यही कारण है कि मैंने समझाया कि एक परत के बीच ऐसा क्यों करना उपयोगी हो सकता है, बस कुछ ऐसा नहीं जो मैं सुझाऊंगा। –
मेरी राय में, धनजी प्रसन्ना की पुस्तक Dependency Injection दोनों शुरुआती और विशेषज्ञ दोनों सॉफ्टवेयर डिजाइनरों के लिए पढ़ा जाना चाहिए। यह सीधे आपके डीआई प्रश्नों से संबंधित है।
एक और महान पुस्तक है [मार्क सेमैन से .NET में निर्भरता इंजेक्शन] (http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501)। – Steven
मैंने वास्तव में DI के बारे में इस आलेख का आनंद लिया, क्योंकि यह उन लोगों के लिए लक्षित है जिनके पास डीआई अनुभव का टन नहीं है, या यह भी नहीं पता कि यह क्या है।
https://mtaulty.com/2009/08/10/m_11554/
एकता क्या है?
It’s a “dependency injection container”.
अब, उस बिंदु पर लोगों पढ़ने का एक समूह इस कहेंगे "हाँ, हम जानते हैं कि और हम पहले से ही कारणों के लिए यह प्रयोग कर रहे हैं ए, बी, सी या हम उपयोग करने के लिए नहीं चुना है, एक्स, वाई, जेड के कारण "और मुझे कल्पना है कि अन्य लोगों का समूह कह सकता है;
“Huh? What’s a dependency injection container?”
इस पोस्ट में बाद के लोगों के लिए है - यह संपूर्ण होने के लिए मतलब नहीं है, लेकिन उम्मीद है कि यह पूरी तरह से बेकार या तो :-)
Guice के user's guide में एक सर्वोत्तम प्रथाओं खंड नहीं है नहीं है।
यहां एक निर्भरता इंजेक्शन विरोधी पैटर्न है: Multiple Constructors।
- 1. गुइस सर्वोत्तम प्रथाओं और विरोधी पैटर्न
- 2. निर्भरता इंजेक्शन सर्वोत्तम अभ्यास
- 3. SQL सर्वर में अनुक्रमणिका बनाने में सर्वोत्तम प्रथाओं और विरोधी पैटर्न?
- 4. निर्भरता इंजेक्शन/विरासत डिजाइन पैटर्न
- 5. रणनीति पैटर्न बनाम निर्भरता इंजेक्शन
- 6. निर्भरता इंजेक्शन कंटेनर - फैक्टरी पैटर्न
- 7. निर्भरता इंजेक्शन और लॉगिंग इंटरफेस
- 8. ExtJS (जावास्क्रिप्ट) मॉड्यूल डिजाइन पैटर्न सर्वोत्तम प्रथाओं
- 9. एमवीवीएम और निर्भरता इंजेक्शन
- 10. निर्भरता इंजेक्शन
- 11. डीएओ और निर्भरता इंजेक्शन, सलाह?
- 12. निर्भरता इंजेक्शन
- 13. निर्भरता इंजेक्शन का उपयोग करके निर्भरता इंजेक्टर इंजेक्शन
- 14. एंड्रॉइड और निर्भरता इंजेक्शन
- 15. वेबफॉर्म और निर्भरता इंजेक्शन
- 16. निर्भरता इंजेक्शन और कारखाने
- 17. स्थिर विधियां एक डीआई विरोधी पैटर्न हैं?
- 18. NuGet और TFS TFS में सर्वोत्तम प्रथाओं
- 19. रणनीति पैटर्न और निर्भरता इंजेक्शन के बीच क्या अंतर है?
- 20. सी # और एक्सेल सर्वोत्तम प्रथाओं
- 21. एनजेन और गैकुटिल सर्वोत्तम प्रथाओं
- 22. php और mysql, सर्वोत्तम प्रथाओं
- 23. विरोधी पैटर्न क्या है?
- 24. निर्भरता इंजेक्शन और नामित वालों
- 25. निर्भरता इंजेक्शन?
- 26. क्या एमईएफ एक निर्भरता इंजेक्शन ढांचा है?
- 27. निर्भरता इंजेक्शन
- 28. एमवीवीएमसी और निर्भरता इंजेक्शन लागू करना
- 29. एकता [निर्भरता] इंजेक्शन और विरासत
- 30. सी # कन्स्ट्रक्टर और निर्भरता इंजेक्शन
मुझे नहीं लगता कि "भाषा-अज्ञेयवादी" यहां मदद करता है: विभिन्न भाषाएं मूल रूप से अलग-अलग दृष्टिकोणों को निर्देशित करती हैं - आप सचमुच सी ++ में एक ही चीज़ नहीं करना चाहेंगे, रूबी कहें। –
तो प्रति भाषा अलग प्रश्न पूछना फायदेमंद हो सकता है?फिर भी, मुझे लगता है कि पर्याप्त सामान्य पैटर्न हैं इसलिए एक सामान्य प्रश्न क्रम में है। – ripper234
मैं इसके बजाय [निर्भरता इंजेक्शन दस्तावेज़] (http://stackoverflow.com/documentation/dependency-injection/topics) विषयों को देखने के लिए इस प्रश्न में योगदान करने में रुचि रखने वाले किसी को भी प्रोत्साहित करता हूं। – dimo414