चार के गिरोह में निर्भरता इंजेक्शन पैटर्न को क्यों नहीं अपनाया गया ? क्या GOF की पूर्व-तिथि व्यापक स्वचालित परीक्षण थी? क्या निर्भरता इंजेक्शन अब एक कोर पैटर्न माना जाता है?
चार के गिरोह में निर्भरता इंजेक्शन पैटर्न को क्यों नहीं अपनाया गया ? क्या GOF की पूर्व-तिथि व्यापक स्वचालित परीक्षण थी? क्या निर्भरता इंजेक्शन अब एक कोर पैटर्न माना जाता है?
जवाबों:
मैं सॉफ्टवेयर डेवलपमेंट पत्रिका का संपादक था जब चार किताबों का गैंग सामने आया था और मैं पूरे विश्वास के साथ कह सकता हूं कि 1994 में यूनिट-परीक्षण व्यापक अभ्यास नहीं था, जब डिजाइन पैटर्न मूल रूप से प्रकाशित हुआ था।
1994 में, C ++ सबसे अधिक इस्तेमाल की जाने वाली ऑब्जेक्ट-ओरिएंटेड भाषा थी, और प्रोग्रामिंग करने वाले अधिकांश लोग C बैकग्राउंड से आ रहे थे। "वस्तुओं में सोच" चीजों में से एक जो लोगों के पास नहीं थी, वह आपके कार्यक्रम में सैकड़ों या हजारों प्रवेश बिंदुओं का विचार है। आपने इसके बारे में सोचा main()
। यदि आपने एक बड़ी परियोजना पर काम किया है, तो आपके पास मॉड्यूल-आधारित कार्यक्रम बनाने के लिए (आमतौर पर काफी विस्तृत) मेकफाइल हो सकता है। लेकिन "यूनिट-परीक्षण"? एक प्रक्रिया शुरू करना, आवश्यक स्मृति संदर्भ का निर्माण, इसे निष्पादित करना, और इसे फाड़ना, प्रति विधि के आधार पर? वह बहुत कट्टरपंथी था।
जावा ने मल्टीपल-एंट्री-पॉइंट प्रोग्रामिंग को अधिक स्पष्ट बनाया। मूल डॉट-कॉम बूम के समय तक, यूनिट-परीक्षण एक प्रसिद्ध तकनीक थी, लेकिन यह वास्तव में JUnit (लगभग 2001?) था जिसके कारण यह आग लग गई और एक सार्वभौमिक अभ्यास बन गया।
हालाँकि रणनीति और एक इंटरफ़ेस के लिए प्रोग्रामिंग की सामान्य अवधारणा GOF और 90 के दशक के मध्य के ज़ेगेटिस्ट का हिस्सा थी, इंजेक्शन का विचार पार्टी के लिए काफी देर से आया (लगभग '03 -'05?)। ईमानदारी से, मेरे भूरे बाल अभी भी DI के उस पहलू के बारे में काफी संदिग्ध हैं ("मेरे लॉन से दूर हो जाओ, तुम कॉर्नर कॉन्फ़िगरेशन फ़ाइलें!")।
उन्होंने इसे रणनीति कहा ।
उनकी रणनीति में जटिल-ध्वनि नाम के बिना निर्भरता इंजेक्शन की सभी विशेषताएं हैं।
मुझे लगता है कि टियर में कार्यान्वयन को अलग करते समय डिपेंडेंसी इंजेक्शन अधिक प्रासंगिक है। एक और क्षेत्र जहां हम निर्भरता इंजेक्शन के बारे में सोचते हैं वह इकाई परीक्षण है। और आपका पूर्व-दिनांक सुझाव सही प्रतीत होता है। अगर गिरोह 2012 में पैटर्न इकट्ठा और अलग करना चाहते थे, तो निश्चित रूप से निर्भरता इंजेक्शन होगा।
रणनीति चर्चा में आ सकती है लेकिन रणनीति निर्भरता इंजेक्शन के बारे में बात नहीं करती है। लेकिन जब किसी एकल परियोजना या dll (सभी वर्ग और इंटरफेस एक ही परियोजना में रहते हैं) में रणनीति पैटर्न का उपयोग करते हुए यह प्रतीत होता है कि हम निर्भरता इंजेक्शन कर रहे हैं। वास्तव में हम नहीं हैं।
अब, यदि रणनीति पैटर्न में उल्लिखित वर्गों और इंटरफेस को अलग-अलग परियोजनाओं या स्तरों में अलग किया जाता है, तो हमें निर्भरता इंजेक्शन तकनीकों का उपयोग करना होगा। हम एकता कॉन्फ़िगरेशन फ़ाइलों का उपयोग कर सकते हैं (हालांकि कोई रनटाइम परिवर्तन संभव नहीं है)। लेकिन रणनीति पैटर्न यह नहीं कहता कि निर्भरता को कैसे इंजेक्ट किया जाए।
अगर कोई पैटर्न है जो डिपेंडेंसी इंजेक्शन के समान है, तो यह एसेंस फैक्ट्री मेथड पैटर्न है। यह पैटर्न निर्भरता को इंजेक्ट करने के लिए एक रणनीति पैटर्न के अंदर इस्तेमाल किया जा सकता है।
उत्तर रणनीति 100% सही है। मैंने इसे वोट दिया लेकिन टिप्पणी कर सकता हूं।
"रणनीति एल्गोरिदम का उपयोग करने वाले ग्राहकों से स्वतंत्र रूप से भिन्न होती है। [1] रणनीति गामा एट अल द्वारा प्रभावशाली पुस्तक डिजाइन पैटर्न में शामिल पैटर्न में से एक है। जिसने सॉफ्टवेयर डिजाइन का वर्णन करने के लिए पैटर्न का उपयोग करने की अवधारणा को लोकप्रिय बनाया।"
एक डिज़ाइन पैटर्न इसके उपयोग पर निर्भर नहीं है। डिपेंडेंसी इंजेक्शन रणनीति पैटर्न का उपयोग करके कार्यान्वित किया जाता है। यदि हमने उपयोग किए गए मामले के आधार पर प्रत्येक पैटर्न का नाम दिया है तो हमें पैटर्न का एक नाम बदलना होगा।
रिपॉजिटरी पैटर्न एक नया पैटर्न नहीं है, यह टेम्पलेट पैटर्न है।
"इस डिज़ाइन पैटर्न के टेम्प्लेट मेथड में, एक या एक से अधिक एल्गोरिथम चरणों को उपवर्गों द्वारा ओवरराइडिंग किया जा सकता है, ताकि अलग-अलग व्यवहारों को सुनिश्चित करने की अनुमति दी जा सके कि ओवररचिंग एल्गोरिथ्म का अभी भी पालन किया जाता है।"
अक्सर पैटर्न संयुक्त और नामित कई पैटर्न होते हैं जैसे कि MVC पैटर्न।
GOF में इस्तेमाल किए गए प्योर एब्सट्रैक्ट क्लासेस का इंटरफेस नहीं था, और एक से अधिक क्लास से वार करने की C ++ की क्षमता का भी फायदा उठाया।