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