8

मैं जितना संभव हो निर्भरता इंजेक्शन का उपयोग करने की कोशिश कर रहा हूं, लेकिन जब मुझे अल्पकालिक निर्भरताओं जैसी चीजों की बात आती है तो मुझे परेशानी हो रही है।सार कारखानों का उपयोग "नया" है?

उदाहरण के लिए, मान लें कि मेरे पास एक ब्लॉग मैनेजर ऑब्जेक्ट है जो डेटाबेस में पाए गए ब्लॉग की एक सूची उत्पन्न करना चाहता है। ऐसा करने के विकल्प (जहां तक ​​मैं कह सकता हूं) हैं:

  1. नया ब्लॉग();
  2. $ यह-> लोडर-> ब्लॉग();
    • लोडर वस्तु, डाटाबेस वस्तुओं, पाठ फिल्टर की तरह वस्तुओं के विभिन्न अन्य प्रकार बनाता है आदि
  3. $ this-> blogEntryFactory->() बनाने के;

हालांकि, # 1 खराब है क्योंकि यह एक मजबूत युग्मन बनाता है। # 2 अभी भी बुरा लगता है क्योंकि इसका मतलब है कि ऑब्जेक्ट फैक्ट्री को पहले इंजेक्शन दिया जाना चाहिए - यह अन्य सभी ऑब्जेक्ट्स को उजागर करना जो इसे बना सकते हैं।

संख्या 3 ठीक लगता है, लेकिन अगर मैं # 3 का उपयोग करता हूं, तो क्या मैं ब्लॉग एंट्री फैक्ट्री में "नए" कीवर्ड डालता हूं, या, क्या मैं लोडर को ब्लॉग एंटर्री फैक्ट्री में इंजेक्ट करता हूं और लोडर का उपयोग करता हूं?

यदि मेरे पास blogEntryFactory जैसे कई अलग-अलग कारखानियां हैं (उदाहरण के लिए मेरे पास उपयोगकर्ता फैक्ट्री और टिप्पणी फैक्ट्री हो सकती है) ऐसा लगता है कि इन सभी अलग-अलग कारखानों में "नया" कीवर्ड डालने पर निर्भरता समस्याएं पैदा होंगी।

मुझे आशा है कि यह समझ में आता है ...

नोट

मैं यह कैसे इस विशिष्ट ब्लॉग उदाहरण के लिए अनावश्यक है के बारे में कुछ जवाब दिया था, लेकिन आप जहां जाना चाहिए वास्तव में, देखते हैं, के मामलों सार फैक्टरी पैटर्न का उपयोग करें, और यही वह बिंदु है जिसे मैं प्राप्त कर रहा हूं। क्या आप उस मामले में "नया" उपयोग करते हैं, या कुछ और करते हैं?

+0

अगर मैंने इसे सही ढंग से या पूरी तरह से पर्याप्त रूप से समझाया नहीं है, तो कृपया मुझे बताएं, और मैं – johnnietheblack

+0

को स्पष्ट करने की कोशिश करूंगा मैंने मॉडल वर्गों पर निर्भरता इंजेक्शन का उपयोग कभी नहीं देखा है। जब तक कि 'ब्लॉग' वर्ग कुछ व्यावसायिक तर्क (जो मॉडल शायद ही कभी करते हैं) को समाहित करता है, वहां कोई युग्मन कम करने की कोशिश करने का कोई मतलब नहीं है - जोड़े को कोई व्यवहार नहीं है। (केवल इकाई की संरचना है, लेकिन यह बदलने वाला नहीं है।) – millimoose

+0

सबसे पहले, टिप्पणी के लिए धन्यवाद ... तो क्या आप कह रहे हैं कि BlogManager को "नया ब्लॉग()" कहां/कॉल करना चाहिए? – johnnietheblack

उत्तर

4

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मैं इस पर एक दरार लेने जा रहा हूं। यह मानता है कि Blog केवल एक डेटा मॉडल ऑब्जेक्ट है जो कुछ डेटा के लिए कंटेनर के रूप में कार्य करता है और नियंत्रक द्वारा भरा जाता है (new Blog बहुत सार्थक नहीं है)। इस मामले में, Blog ऑब्जेक्ट ग्राफ़ का एक पत्ता है, और new का उपयोग ठीक है। यदि आप उन विधियों का परीक्षण करने जा रहे हैं जिन्हें Blog बनाने की आवश्यकता है, तो आपको एक साथ Blog के निर्माण का परीक्षण करना होगा, और एक नकली वस्तु का उपयोग करना समझ में नहीं आता है .. Blog इस विधि से पहले नहीं टिकता है।

उदाहरण के तौर पर, कहें कि PHP में सरणी निर्माण नहीं था लेकिन संग्रह वस्तु थी। क्या आप $this->collectionsFactory->create() पर कॉल करेंगे या आप new Array; कहने से संतुष्ट होंगे?

+0

पत्ती स्पष्टीकरण के साथ प्रबुद्ध होना। – johnnietheblack

+1

तंदू, जैसा कि मैंने अभी ऊपर जोड़ा है, हालांकि इस परिदृश्य में फैक्ट्री की योग्यता नहीं हो सकती है, ऐसे परिदृश्य हैं जहां कारखानों का योग्यता है। उन मामलों में, क्या आप फैक्ट्री में "नया" उपयोग करते हैं, या कुछ और करते हैं? – johnnietheblack