की आवश्यकता है हमारी सभी रिपोर्ट ऑब्जेक्ट ग्राफ़ से बनाई गई हैं जो हमारे डोमेन ऑब्जेक्ट्स से अनुवादित हैं। इसे सक्षम करने के लिए, हमारे पास प्रत्येक रिपोर्ट के लिए एक अनुवादक वर्ग है, और निर्भरता में गुजरने के लिए निर्भरता इंजेक्शन का उपयोग कर रहा है।उन ऑब्जेक्ट्स के लिए निर्भरता इंजेक्शन जिनके लिए पैरामीटर
यह महान काम किया, और इस तरह से संरचित अच्छा कक्षाएं प्राप्त होते हैं:
public class CheckTranslator : ICheckTranslator
{
public CheckTranslator (IEmployeeService empSvc
, IPaycheckService paySvc)
{
_empSvc = empSvc;
_paySvc = paySvc;
}
public Check CreateCheck()
{
//do the translation...
}
}
कई अलग अलग समूह विकल्प हालांकि, कुछ मामलों में मानचित्रण है। नतीजतन, सी-टोर वर्ग निर्भरताओं और मानकों के मिश्रण में बदल जाएगा।
public class CheckTranslator : ICheckTranslator
{
public CheckTranslator (IEmployeeService empSvc
, IPaycheckService paySvc
, bool doTranslateStubData
, bool doAttachLogo)
{
_empSvc = empSvc;
_paySvc = paySvc;
_doTranslateStubData = doTranslateStubData;
_doAttachLogo = doAttachLogo;
}
public Check CreateCheck()
{
//do the translation...
}
}
अब, हम अभी भी इसका परीक्षण कर सकते हैं, लेकिन यह वास्तव में कम से कम एक स्वच्छ फैशन में आईओसी कंटेनर के साथ काम नहीं करता है। इसके अलावा, यदि हम प्रत्येक चेक के लिए सेटिंग्स अलग हैं तो हम अब CreateCheck को दो बार कॉल नहीं कर सकते हैं।
जबकि मुझे पता है कि यह एक समस्या है, मुझे जरूरी सही समाधान नहीं दिखता है। यह प्रत्येक वर्ग के लिए फैक्ट्री बनाने के लिए अजीब लगता है ... या यह सबसे अच्छा तरीका है?
क्या आप "आईओसी कंटेनर के साथ वास्तव में काम नहीं करते" पर विस्तार कर सकते हैं? आप किस कंटेनर का उपयोग कर रहे हैं? –
किसी भी तरह मैं निर्भरता इंजेक्शन के चमत्कारों को समझने में विफल रहता हूं और यह अपने स्वयं के फैंसी नाम के साथ एक पैटर्न भी क्यों है। बूल पैरामीटर को गुणों में बदलने से आपको क्या रोकता है? –
@ हैमिश: वे कन्स्ट्रक्टर पैरामीटर हैं क्योंकि वे अनिवार्य हैं। उन्हें कन्स्ट्रक्टर में रखने से यह लागू होता है कि वे घटक का उपयोग करने से पहले स्पष्ट रूप से सेट हैं। –