निर्भरता इंजेक्शन को लागू करने के तरीकों में से एक उद्देश्य व्यापार तर्क से वस्तु निर्माण को अलग करना है। आमतौर पर, इसमें ऑब्जेक्ट सृजन के लिए फैक्ट्री का उपयोग करना शामिल है।क्या फैक्टरी विधि में पैरामीटर पास करना ठीक है?
इस क्षण तक, मैं गंभीरता से एक फैक्टरी का उपयोग कर कभी नहीं माना जाता है तो मैं माफी माँगता हूँ इस सवाल का एक छोटा सा साधारण लगता है, तो:
फैक्टरी पैटर्न के सारे उदाहरण है कि मैं के पार चला गया है में, मैं हमेशा बहुत सरल उदाहरण देखें जिनमें पैरामीटर नहीं है। उदाहरण के लिए, यहां Misko Hevery's उत्कृष्ट How To Think About the "new" Operator आलेख से चोरी की गई फैक्टरी है।
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }
हालांकि, अगर मैं प्रत्येक घर का नाम बनाने के लिए तैयार करता हूं तो क्या होता है? क्या मैं अभी भी फैक्टरी पैटर्न का उपयोग कर रहा हूं यदि मैं इस कोड को फिर से लिखूं?
class ApplicationBuilder { House build(const std::string & house_name) { return new House(house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }
ध्यान दें कि मेरी फैक्टरी विधि कॉल इस से बदल गया है:
ApplicationBuilder builder; House * my_house = builder.build();इस के लिए
:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");
वैसे: मैं वस्तु को अलग करने की अवधारणा व्यापार तर्क से instantiating लगता है अच्छा है, मैं बस यह पता लगाने की कोशिश कर रहा हूं कि मैं इसे अपनी स्थिति में कैसे लागू कर सकता हूं। मुझे क्या भ्रमित करता है कि फैक्टरी पैटर्न के बारे में मैंने जो भी उदाहरण देखा है, वे कभी भी बिल्ड() फ़ंक्शन में किसी भी पैरामीटर को पास नहीं करते हैं।
स्पष्ट होने के लिए: मुझे इसे तुरंत चालू करने से पहले पल तक घर का नाम नहीं पता।
मैंने अक्सर देखा है कि कारखानों ने पैरामीटर लेते हैं जैसा आपने दिखाया है। इसमें कुछ भी गलत नहीं है। या आपके प्रश्न के संदर्भ में। यह बिल्कुल ठीक है। – grieve