47

त्वरित फॉरवर्ड:समझौता आईओसी कंटेनर और निर्भरता इंजेक्शन

मैं निर्भरता इंजेक्शन और आईओसी कंटेनर का एक बेहतर समझ हो रही करने के इरादे से इस लिख रहा हूँ, लेकिन यह भी इतना है कि बाद में मैं गलतियों उस में सही कर सकते हैं और इसके बारे में मेरे कुछ दोस्तों को भी सिखाने में मदद के लिए इसका इस्तेमाल करें।

अभी तक मैंने विभिन्न ढांचे (लार्वेल, ईंधन, कोडिनेटर, सिम्फनी) के लिए प्रलेखन के माध्यम से पढ़ने की कोशिश की है और मैंने पाया कि फ्रेमवर्क के बहुत से पहलू थे जिन्हें मुझे सहज महसूस करने के लिए आवश्यक था। ढांचे में खुद का उपयोग करने की कोशिश करने से पहले अपने आप में से प्रत्येक प्रमुख टुकड़े को व्यक्तिगत रूप से सीखने का प्रयास करने का फैसला किया।

मैंने कई अर्थों को गुमराह करने में बिताया है, स्टैक ओवरफ्लो प्रतिक्रियाओं को देखकर, और आईओसी क्या समझने की कोशिश कर रहे विभिन्न लेख पढ़ रहे हैं और निर्भरताओं का सही ढंग से प्रबंधन करने के लिए इसका उपयोग कैसे किया है, और मेरा मानना ​​है कि मैं समझता हूं कि यह अवधारणा में क्या है, लेकिन मैं अभी भी इसे सही ढंग से कार्यान्वित करने के तरीके पर भूरे रंग का हूं। मुझे लगता है कि मेरी मदद करने के लिए इसे पढ़ने वाले किसी भी व्यक्ति के लिए सबसे अच्छा तरीका यह है कि आईओसी कंटेनर और निर्भरता इंजेक्शन की मेरी वर्तमान समझ क्या है, और फिर उन लोगों को दें जो मेरी समझ से कम समझते हैं कि मेरी समझ कम हो जाती है।

मेरे समझ:

  • एक निर्भरता है जब ClassA का एक उदाहरण ClassA का एक नया उदाहरण का दृष्टांत को ClassB का एक उदाहरण की आवश्यकता है।
  • एक निर्भरता इंजेक्शन तब होता है जब कक्षा ए क्लास के एक उदाहरण को पारित किया जाता है, या तो क्लासए के कन्स्ट्रक्टर में पैरामीटर के माध्यम से या एक सेट ~ निर्भरता नाम \ ~ ~ ~ निर्भरता नाम ~ $ param) फ़ंक्शन के माध्यम से। (यह उन क्षेत्रों में से एक है जहां मैं पूरी तरह से निश्चित नहीं हूं)
  • एक आईओसी कंटेनर एक सिंगलटन क्लास है (किसी भी समय केवल 1 उदाहरण तत्काल हो सकता है) जहां इस परियोजना के लिए उन वर्गों की वस्तुओं को तत्काल करने का विशिष्ट तरीका पंजीकृत किया जा सकता है। Here's a link to an example of what I'm trying to describe along with the class definition for the IoC container I've been using

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

तो उदाहरण के लिए: मैं mysqli का एक बाल वर्ग बनाना चाहता हूं, लेकिन मैं इस कक्षा को आईओसी कंटेनर में पंजीकृत करना चाहता हूं ताकि मैं केवल आईओसी कंटेनर में पंजीकृत तरीके से निर्मित मूल वर्ग के साथ तुरंत चालू हो सकूं। मैं कोड को डुप्लिकेट किए बिना ऐसा करने का तरीका नहीं सोच सकता (और चूंकि यह एक सीखने की परियोजना है, मैं इसे यथासंभव 'शुद्ध' रखने की कोशिश कर रहा हूं)।

  • क्या मैं OOP के कुछ सिद्धांत को तोड़ने के बिना संभव ऊपर करने के लिए कोशिश कर रहा हूँ है: Here are some more examples of what I am trying to describe.

    तो यहाँ मेरे सवालों में से कुछ कर रहे हैं? मुझे सी ++ में पता है मैं इसे पूरा करने के लिए गतिशील स्मृति और एक प्रतिलिपि निर्माता का उपयोग कर सकता हूं, लेकिन मैं php में उस तरह की कार्यक्षमता को खोजने में सक्षम नहीं हूं।(मैं स्वीकार करूंगा कि मेरे पास __construct के अलावा किसी भी अन्य जादू विधियों का उपयोग करके बहुत कम अनुभव है, लेकिन अगर मैं सही ढंग से समझता हूं तो पढ़ने और __clone से, मैं इसे कन्स्ट्रक्टर में उपयोग नहीं कर सकता था ताकि बच्चे वर्ग को क्लोन को तुरंत चालू किया जा सके। अभिभावक वर्ग का उदाहरण)।

  • आईओसी के संबंध में मेरी सभी निर्भरता वर्ग परिभाषा कहां जाना चाहिए? (क्या मेरे IoC.php में शीर्ष पर requ_once ('dependencyClassDefinition.php') का गुच्छा होना चाहिए? मेरा आंत प्रतिक्रिया यह है कि एक बेहतर तरीका है, लेकिन मैं अभी तक एक के साथ नहीं आया हूं)
  • कौन सी फ़ाइल क्या मुझे अपनी वस्तुओं को पंजीकृत करना चाहिए? वर्तमान में कक्षा परिभाषा के बाद IoC.php फ़ाइल में IoC :: रजिस्टर() में सभी कॉल कर रहे हैं।
  • क्या मुझे उस वर्ग को पंजीकृत करने से पहले आईओसी में निर्भरता पंजीकृत करने की आवश्यकता है, जिस पर निर्भरता की आवश्यकता है? चूंकि मैं अज्ञात फ़ंक्शन का आविष्कार नहीं कर रहा हूं जब तक कि मैं वास्तव में आईओसी में पंजीकृत किसी ऑब्जेक्ट को तुरंत चालू नहीं करता, मैं अनुमान लगा रहा हूं, लेकिन यह अभी भी चिंता का विषय नहीं है।
  • क्या कोई और चीज है जिसे मैं देख रहा हूं कि मुझे करना या उपयोग करना चाहिए? मैं इसे एक समय में एक कदम उठाने की कोशिश कर रहा हूं, लेकिन मैं यह भी नहीं जानना चाहता कि मेरा कोड पुन: प्रयोज्य होगा और, सबसे महत्वपूर्ण बात यह है कि कोई भी जो मेरे प्रोजेक्ट के बारे में कुछ नहीं जानता उसे पढ़ और समझ सकता है।

मुझे पता है कि यह बहुत लंबा है, और सिर्फ इसे पढ़ने के लिए समय लेने वाले किसी भी व्यक्ति को धन्यवाद देना चाहता था, और इससे भी ज्यादा कोई भी उनके ज्ञान को साझा करता है।

उत्तर

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