मैं इस बात पर विचार कर रहा हूं कि सरल फिक्स्ड पब्लिक एपीआई प्रदान करने के साथ निर्भरता इंजेक्शन का उपयोग करके परीक्षण योग्य डिजाइन को कैसे संतुलित किया जाए। मेरी दुविधा यह है: लोग कुछ करना चाहते हैं var server = new Server(){ ... }
और कई निर्भरता और निर्भरता के ग्राफ बनाने के बारे में चिंता करने की ज़रूरत नहीं Server(,,,,,,)
है। विकसित होने के दौरान, मैं बहुत ज्यादा चिंता नहीं करता, क्योंकि मैं सभी को संभालने के लिए एक IoC / DI ढांचे का उपयोग करता हूं (मैं किसी भी कंटेनर के जीवनचक्र प्रबंधन पहलुओं का उपयोग नहीं कर रहा हूं, जो आगे चीजों को जटिल करेगा)।
अब, निर्भरताएँ फिर से लागू होने की संभावना नहीं है। विस्तार के लिए सीम बनाने के बजाय परीक्षण (और सभ्य डिजाइन!) के लिए इस मामले में घटक लगभग विशुद्ध रूप से है, लोग 99.999% समय एक डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करना चाहते हैं। इसलिए। मैं निर्भरता को हार्डकोड कर सकता था। हम ऐसा नहीं करना चाहते, हम अपना परीक्षण खो देते हैं! मैं हार्ड-कोडित निर्भरता के साथ एक डिफ़ॉल्ट कंस्ट्रक्टर प्रदान कर सकता था और जो निर्भरता लेता है। यह ... गड़बड़ है, और भ्रमित होने की संभावना है, लेकिन व्यवहार्य है। मैं कंस्ट्रक्टर प्राप्त करने वाले पर निर्भरता को आंतरिक बना सकता था और अपनी इकाई परीक्षणों को एक दोस्त असेंबली (सी # मानकर) कर सकता था, जो सार्वजनिक एपीआई को टिडिज करता है, लेकिन रखरखाव के लिए एक बुरा छिपे हुए जाल को छोड़ देता है। दो रचनाकारों के होने के कारण जो स्पष्ट रूप से स्पष्ट रूप से जुड़े हुए हैं मेरी पुस्तक में सामान्य रूप से खराब डिजाइन होंगे।
फिलहाल मैं कम से कम बुराई के बारे में सोच सकता हूं। राय? बुद्धिमत्ता?