यहाँ मेरे दो सेंट:
मैं एक php एप्लिकेशन को पुनःप्राप्त कर रहा हूं और जितना संभव हो उतना निर्भरता इंजेक्शन लगाने की कोशिश कर रहा हूं
यदि आप एक निर्भरता इंजेक्शन ढांचे का उपयोग कर रहे हैं तो आप राज्य नहीं करते हैं। मुझे लगता है कि आपको निश्चित रूप से करना चाहिए। ऐसी किसी चीज़ का उपयोग करें जो आपको आपकी ज़रूरत की सुविधाएँ प्रदान करती है: /programming/9348376/guice-like-d dependency-injection-frameworks-in-php ।
अब मैं जिस समस्या में भाग गया हूं, उस बिंदु पर मैं वास्तव में नई वस्तुएं कैसे बना सकता हूं? इसकी तरह मैं एक उच्च स्तर के वर्ग में समाप्त हो जाएगा, नई वस्तुओं का भार पैदा कर रहा हूँ क्योंकि वहाँ कोई और नहीं है। यह गलत लगता है।
आप सामान्य रूप से कॉन्फ़िगरेशन या एक केंद्रीय बिंदु का उपयोग प्रारंभिक वस्तुओं की तात्कालिकता के लिए करते हैं जो आपके आवेदन को बनाते हैं। कंटेनर आपके लिए ऑब्जेक्ट बनाएगा।
फिर आप IoC कंटेनर के माध्यम से वस्तुओं (सेवाओं, प्रदाताओं, नियंत्रकों ...) तक पहुंचते हैं। यदि आवश्यक हो तो यह पारदर्शी रूप से आपके लिए एक वस्तु का निर्माण करेगा, या आपको उपयुक्त मौजूदा उदाहरण का संदर्भ देगा।
बेशक, वस्तुओं के अपने विशेष कार्यान्वयन के अंदर आप उन अन्य वस्तुओं को त्वरित कर सकते हैं जिन पर आपको DI (डेटा संरचना, कस्टम प्रकार, आदि) की आवश्यकता नहीं है, लेकिन यह सामान्य प्रोग्रामिंग है।
मैंने कुछ ब्लॉग पढ़े हैं जो सभी ऑब्जेक्ट्स बनाने के लिए फ़ैक्टरी कक्षाओं का उपयोग करते हैं, और फिर आप फ़ैक्टरी को अन्य कक्षाओं में इंजेक्ट करते हैं। फिर आप फ़ैक्टरी विधियों को कॉल कर सकते हैं, और फ़ैक्टरी आपके लिए नई वस्तु बनाती है।
आम तौर पर, आप एक कारखाने का उपयोग करते हैं यदि आप चाहते हैं कि आईओसी फ्रेमवर्क आपके कारखानों के माध्यम से कुछ आईओसी वस्तुओं को तत्काल भेज दे (यह तब आवश्यक होता है जब किसी विशेष वस्तु को तत्काल करने के लिए कुछ अतिरिक्त काम की आवश्यकता होती है)। यदि आप बस "नई वस्तु ()" के साथ अपनी वस्तुओं को बना सकते हैं, और कुछ गुण सेट कर सकते हैं, तो आप जरूरी नहीं कि एक फैक्टरी पैटर्न का उपयोग करना चाहते हैं।
दूसरे शब्दों में, मैं कहूंगा कि किसी वर्ग या वर्गों के समूह के लिए फ़ैक्टरी पैटर्न का उपयोग करना इस बात पर निर्भर करता है कि आप उन वर्गों को कैसे मॉडल बनाना चाहते हैं, इस पर नहीं कि क्या आप DI का उपयोग करते हैं (जब तक कि आपके DI कार्यान्वयन में स्पष्ट रूप से कारखानों की आवश्यकता नहीं है, जो कि असामान्य है)।
फैक्ट्री का उपयोग करने के लिए आप अपने IoC फ्रेमवर्क को भी कॉन्फ़िगर करते हैं, जब आप 3rd पार्टी लिब का उपयोग कर रहे होते हैं जिसके लिए पहले से ही एक फैक्ट्री के उपयोग की आवश्यकता होती है। इस मामले में आपके पास इस बारे में कोई नियंत्रण नहीं है और आपको अपने आईओसी कंटेनर को यह बताने की आवश्यकता है: "हे, जब मैं इनमें से एक इंटरफेस के लिए पूछता हूं, तो आपको मुझे उपयुक्त उदाहरण प्रदान करने के लिए इस कारखाने का उपयोग करना होगा"।
ऐसा करने के साथ मेरी चिंता अब मेरी फैक्ट्री कक्षाएं एक नई फ्री-फॉर-ऑल बनने जा रही हैं! मुझे लगता है कि यह ठीक हो सकता है क्योंकि वे कारखाने के वर्ग हैं, लेकिन कारखाने के पैटर्न और डीआई का उपयोग करते समय छड़ी करने के लिए कुछ नियम हैं, या क्या मैं यहां निशान से दूर जा रहा हूं।
इस स्थिति में, यह लगता है कि आपको इन वस्तुओं / सेवाओं / नियंत्रकों / जो कुछ भी के लिए फ़ैक्टरी पैटर्न का उपयोग करने की आवश्यकता नहीं है, और आप बस अपने IoC को "नए" उपयुक्त वर्ग के साथ तुरंत कनेक्ट करने और बाकी सभी चीजों को इंजेक्ट करने के लिए कॉन्फ़िगर कर सकते हैं।
मुझे उम्मीद है यह मदद करेगा।