मैं एक डिजाइन पर काम कर रहा हूं, लेकिन एक रोडब्लॉक को मार कर रखता हूं। मेरे पास एक विशेष वर्ग (मॉडलडिफ) है जो मूल रूप से एक XML स्कीमा (थिंक डोम) को पार्स करके निर्मित एक जटिल नोड ट्री का मालिक है। मैं अच्छे डिजाइन सिद्धांतों (SOLID) का पालन करना चाहता हूं, और यह सुनिश्चित करना चाहता हूं कि परिणामी प्रणाली आसानी से परीक्षण योग्य हो। मेरा हर इरादा है कि मैं मॉडलडिफ के निर्माता में निर्भरता को पारित करने के लिए डीआई का उपयोग करूं (ताकि परीक्षण के दौरान, इनकी आसानी से अदला-बदली की जा सके)।
हालाँकि, मैं इससे जूझ रहा हूँ, लेकिन यह नोड ट्री का निर्माण है। यह पेड़ पूरी तरह से सरल "मूल्य" वस्तुओं से बना है जो स्वतंत्र रूप से परीक्षण करने की आवश्यकता नहीं होगी। (हालांकि, मैं अभी भी इन वस्तुओं के निर्माण के साथ सहायता करने के लिए ModelDef में एक सार फैक्टरी पारित कर सकता हूं।)
लेकिन मैं पढ़ता रहता हूं कि एक कंस्ट्रक्टर को कोई वास्तविक काम नहीं करना चाहिए (जैसे फ़्लाव: कंस्ट्रक्टर रियल वर्क करता है )। यह मेरे लिए एकदम सही समझ में आता है यदि "वास्तविक कार्य" का अर्थ है भारी-भरकम आश्रित वस्तुओं का निर्माण करना जो कि बाद में परीक्षण के लिए रोकना चाहते हैं। (जिन्हें डीआई के माध्यम से पारित किया जाना चाहिए।)
लेकिन इस नोड ट्री जैसे हल्के वजन वाले ऑब्जेक्ट के बारे में क्या? वृक्ष को कहीं पैदा करना है, है न? क्यों नहीं ModelDef (का उपयोग करते हुए, एक buildNodeTree () विधि) के निर्माता के माध्यम से?
मैं वास्तव में ModelDef के बाहर नोड ट्री नहीं बनाना चाहता हूं और फिर इसे (कंस्ट्रक्टर DI के माध्यम से) पास कर सकता हूं, क्योंकि स्कीमा को पार्स करके नोड ट्री बनाने के लिए एक महत्वपूर्ण मात्रा में जटिल कोड की आवश्यकता होती है - कोड जिसे पूरी तरह से जांचने की आवश्यकता होती है । मैं इसे "गोंद" कोड में नहीं बदलना चाहता हूं (जो अपेक्षाकृत तुच्छ होना चाहिए, और संभवतः सीधे परीक्षण नहीं किया जाएगा)।
मैंने नोड ट्री बनाने के लिए कोड को एक अलग "बिल्डर" ऑब्जेक्ट में डालने के बारे में सोचा है, लेकिन इसे "बिल्डर" कहने में संकोच होता है, क्योंकि यह वास्तव में बिल्डर पैटर्न से मेल नहीं खाता है (जो दूरबीन को नष्ट करने के साथ अधिक चिंतित हैं। कंस्ट्रक्टर्स)। लेकिन भले ही मैंने इसे कुछ अलग कहा (उदाहरण के लिए NodeTreeConstructor), यह अभी भी एक हैक की तरह महसूस करता है कि मॉडलडिफ कंस्ट्रक्टर को नोड ट्री बनाने से बचने के लिए बस हैक करना पड़ता है। इसका निर्माण कहीं न कहीं करना होगा; उस वस्तु में क्यों नहीं जो उसके पास है?