TLDR
अनुभवजन्य डेटा अप्रासंगिक है। उपकरण और अभ्यास (जैसे DI) विशेष समस्याओं को हल करते हैं। अपनी समस्याओं को समझें, टूल का उपयोग करना सीखें, और यह तब स्पष्ट हो जाएगा जब कोई टूल मूल्यवान होगा - और आप परिणामों को किसी भी सामान्यीकृत, एकत्रित, आनुभविक डेटा की तुलना में अधिक स्पष्ट रूप से समझा पाएंगे।
और अब, बहुत अधिक वाचालता के साथ ...
क्या अनुभवजन्य साक्ष्य है?
ज़रूर, शायद। या कम से कम हो सकता है। लेकिन कौन परवाह करता है? यह प्रासंगिक नहीं है।
DI का सांख्यिकीय लागत-लाभ विश्लेषण अकादमिक रूप से दिलचस्प हो सकता है, लेकिन, यह आवश्यक रूप से व्यक्तिगत सफलता की भविष्यवाणी नहीं करता है। अलग-अलग परिणाम व्यक्तिगत सफलताओं और असफलताओं को छिपाते हैं । और, मैं तर्क दे सकता हूं कि "इंजील" प्रथाओं के बारे में डेटा विशेष रूप से जहरीला है। ये अनुशासन दोनों जोश और मूर्खों को आकर्षित करते हैं, दोनों एक "शुद्ध" कार्यान्वयन के शुद्ध प्रभाव को अस्पष्ट करते हैं, और दोनों में से जो भी आप हो सकते हैं!
तो, हम कैसे जानते हैं कि डिपेंडेंसी इंजेक्शन बिल्कुल मूल्यवान है ?
अच्छा प्रश्न! महान सवाल, वास्तव में। और मैं आपके साथ हूं - मैं हठधर्मिता "सर्वोत्तम प्रथाओं" पर समय और मानसिक प्रयास को बर्बाद करने से नफरत करता हूं जिसे कोई भी उचित नहीं ठहरा सकता। इसलिए, मुझे खुशी है कि आपने पूछा।
उह। लेकिन, यहाँ शर्मनाक समस्या है ... सामान्य शब्दों में, आप नहीं जानते। और, इससे भी अधिक शर्मनाक, आपका कोड वास्तव में DI को शुरू करने से किसी भी तरह से बेहतर नहीं हो सकता है।
दम तोड़ देना!
⊙▃⊙ . . . (╯°□°)╯︵ ┻━┻
...
तो, शायद अब आप सोच रहे हैं ...
मुझे परेशान क्यों होना चाहिए 'मुक्केबाज़ी की चीजें साबित नहीं हुईं हैं नथिन!'
सबसे पहले, चलो बस बहस के हर पक्ष पर - बस बैठ जाओ। मैं आपको विश्वास दिलाता हूं कि कुत्तेवाद और संदेह के बीच कारण और स्तर-नेतृत्व का एक सुंदर स्वर्ग है। (और सामयिक विलक्षण एसईई पोस्ट।) और, पीओएपी आपको वहां ले जा सकता है।
... जिससे मेरा मतलब है, सिद्धांत लागू करने का सिद्धांत :
सिद्धांत, पैटर्न और अभ्यास अंतिम उद्देश्य नहीं हैं। इसलिए प्रत्येक का अच्छा और उचित अनुप्रयोग एक बेहतर, अधिक अंतिम उद्देश्य से प्रेरित और विवश है।
आपको यह समझने की आवश्यकता है कि आप जो कर रहे हैं वह क्यों कर रहे हैं!
(पीओएपी पीओएपी से छूट नहीं है।)
(मैं कहूंगा, "मेरा जोर," लेकिन यह मेरे अपने "ब्लॉग" से वैसे भी है। तो, यह सब मेरा है!)
मुझे वहां मुख्य बिंदु को दोहराना चाहिए: आपको यह समझने की आवश्यकता है कि आप जो कर रहे हैं वह क्यों कर रहे हैं।
और शायद स्पष्ट करने के लिए, यह आम तौर पर किसी दिए गए "कुछ" (जैसे डिपेंडेंसी इंजेक्शन) को लेने के लिए समझ में नहीं आता है, और इसका उपयोग बिना पहले से समझे कि यह किस समस्या को हल करता है - विशेष रूप से आपके लिए। यदि आप अपनी समस्याओं को समझते हैं और "कुछ" (जैसे डीआई) कैसे काम करता है, तो यह कुछ हद तक "स्पष्ट" होगा कि "कुछ" कितना उपयोगी है, सामान्यीकृत, एकत्रित, आनुभविक डेटा की परवाह किए बिना बहुत अधिक।
यदि डि की असहायता या संयुक्त राष्ट्र या कम से कम अपने तर्क शक्तियों से परे - - आप के लिए -helpfulness स्पष्ट नहीं है कि आप या तो डि समझ में नहीं आता, या आप अपने स्वयं की समस्याओं को नहीं समझते।
आइए एक वास्तविक दुनिया पर विचार करें "दृष्टांत।"
हमें एक बॉक्स बनाने की जरूरत है। हमारे पास लकड़ी है। हमारे पास नाखून हैं। और, हमारे पास दो उपकरण हैं: एक मानक पंजा हथौड़ा और एक पेचकश ।
अब, हमारे पास यह दिखाने के लिए कुछ व्यापक अनुभवजन्य डेटा हो सकते हैं कि स्क्रू ड्रायर्स के साथ निर्मित बॉक्स हथौड़ों के साथ निर्मित की तुलना में समग्र रूप से अधिक मजबूत बक्से हैं। लेकिन, यदि आप उन नाखूनों को अंदर करने की कोशिश करते हैं, तो आप एक बॉक्स के साथ बिल्कुल भी समाप्त नहीं होंगे। और, यदि आप पेचकश के साथ उन्हें स्मैक करने की कोशिश करते हैं, तो आप अंततः उन्हें प्राप्त कर सकते हैं; लेकिन, इसे और अधिक समय और प्रयास की आवश्यकता होगी, और अंतिम परिणाम कम सटीक (और मजबूत) होगा, जबकि आपने बस हथौड़ा का उपयोग किया था।
और, यदि आपने कभी किसी को पहले किसी उपकरण का उपयोग करते देखा है, और यदि आप समझते हैं कि एक बॉक्स कैसा दिखता है, तो निर्णय स्पष्ट है।
टेलिकिनेज़ीस!
त्रुटि ... हम्म ...
हाँ-तो, निर्भरता इंजेक्शन क्या समस्या हल करता है?
यह कठोर, बिना-विन्यास वाले कोड को रोकने के लिए काम करता है, जो अक्सर इसलिए अन- टेस्टेबल होता है ।
यह इनवॉइसिंग कोड की अनुमति देकर यह तय करता है कि एक मॉड्यूल किन वस्तुओं के साथ काम करता है। और मुझे पता है कि आप इसे सोच रहे हैं, और आप सही हैं: यह एक नई अवधारणा भी नहीं है। बीजगणित के होने के बाद से विधि / कार्यप्रणालियां मौजूद हैं।
हमने मूल पैरामीटर पारित करना शुरू कर दिया, इसे "डिपेंडेंसी इंजेक्शन" कहा, एक बार जब हमने संचय किया और हमारे असंतुलन को देखने के लिए पर्याप्त कोड विरासत में मिला। कोड के पहाड़ जो हम ऊपर बैठे थे, उन्हें आसानी से बदला नहीं जा सकता, परीक्षण किया गया, या फिर से उपयोग नहीं किया गया , बस इसलिए कि निर्भरताएं छिपी हुई थीं।
इसलिए, निर्भरता इंजेक्शन के लिए ईर्ष्या धर्मयुद्ध ...
के। लेकिन, मैं ठीक-ठीक तर्क दे सकता हूं। चौखटे क्यों ?
जैसा कि मैं इसे समझता हूं, डीआई फ्रेमवर्क मुख्य रूप से बॉयलरप्लेट बिल्डअप (अत्यधिक डीआईजी, आईएमओ के कारण) की समस्या को हल करते हैं - खासकर जब सभी मॉड्यूल के लिए मानक "डिफ़ॉल्ट" निर्भरताएं होती हैं जिनकी उन्हें आवश्यकता होती है। DI चौखटे जादुई करते हैं (संभावित रूप से भी शरारती!) चीजों को उन डिफ़ॉल्ट निर्भरता को पर्ची करने के लिए जब वे स्पष्ट रूप से आह्वान के बिंदु पर पारित नहीं होते हैं। ( सेवा लोकेटर के रूप में समान प्रभाव जब इस तरीके से उपयोग किया जाता है, तो आप पर ध्यान दें!)
निर्भरता इंजेक्शन, एक "अनुशासन" के रूप में, वास्तव में सही पाने के लिए वास्तव में कठिन है। यह DI का उपयोग करने या न करने की बात नहीं है; यह जानने की बात है कि किन आश्रितों के बदलाव की संभावना है या उन लोगों का मजाक उड़ाने और उन्हें इंजेक्शन लगाने की जरूरत है । और फिर, यह तय करने की बात है कि क्या डीआई कुछ बेहतर से बेहतर है, जैसे सेवा स्थान ...
लेकिन, मैं आपको Google को प्रोत्साहित करूंगा , हो सकता है कि यह SO उत्तर देखें , संभवतः आपके उद्योग में एक सुपर-अनुभवी और सफल डेवलपर से बात करें, और सीआरएसई के लिए विशिष्ट उदाहरण पोस्ट करें ।