इन-हाउस परियोजनाओं के एक समूह के लिए C # /। NET का उपयोग करने के वर्षों में, हमारे पास एक पुस्तकालय में सामान की एक बड़ी संख्या में व्यवस्थित रूप से विकसित होने के लिए है। इसे "यूटिल" कहा जाता है, और मुझे यकीन है कि आप में से कई ने अपने करियर में इनमें से किसी एक जानवर को देखा होगा।
इस लाइब्रेरी के कई हिस्से बहुत ज्यादा स्टैंडअलोन हैं, और इन्हें अलग-अलग प्रोजेक्ट्स में विभाजित किया जा सकता है (जिसे हम ओपन-सोर्स करना चाहते हैं)। लेकिन एक बड़ी समस्या है जिसे अलग-अलग पुस्तकालयों के रूप में जारी किए जाने से पहले हल करने की आवश्यकता है। असल में, इन पुस्तकालयों के बीच "वैकल्पिक निर्भरता" कहे जाने वाले बहुत सारे मामले हैं।
इसे बेहतर ढंग से समझाने के लिए, कुछ ऐसे मॉड्यूलों पर विचार करें जो स्टैंड-अलोन लाइब्रेरी बनने के लिए अच्छे उम्मीदवार हैं। CommandLineParser
कमांड लाइनों को पार्स करने के लिए है। XmlClassify
XML के लिए वर्गों को क्रमबद्ध करने के लिए है। PostBuildCheck
संकलित असेंबली पर जाँच करता है और विफल होने पर संकलन त्रुटि की रिपोर्ट करता है। ConsoleColoredString
रंगीन स्ट्रिंग शाब्दिक के लिए एक पुस्तकालय है। Lingo
उपयोगकर्ता इंटरफेस का अनुवाद करने के लिए है।
उन पुस्तकालयों में से प्रत्येक का पूरी तरह से स्टैंड-अलोन इस्तेमाल किया जा सकता है, लेकिन अगर उन्हें एक साथ उपयोग किया जाता है तो उपयोगी अतिरिक्त सुविधाएँ होनी चाहिए। उदाहरण के लिए, दोनों CommandLineParser
और XmlClassify
पर्दाफाश के बाद निर्माण की जाँच कार्यक्षमता, जिसके लिए आवश्यक है PostBuildCheck
। इसी तरह, CommandLineParser
रंग स्ट्रिंग स्ट्रिंग शाब्दिक का उपयोग करके विकल्प प्रदान करने की अनुमति देता है, आवश्यकता होती है ConsoleColoredString
, और इसके माध्यम से अनुवाद योग्य प्रलेखन का समर्थन करता है Lingo
।
तो मुख्य अंतर यह है कि ये वैकल्पिक विशेषताएं हैं । दस्तावेज़ का अनुवाद किए बिना या किसी भी पोस्ट-बिल्ड चेक का प्रदर्शन किए बिना, एक सादे, बिना किसी तार के साथ कमांड लाइन पार्सर का उपयोग कर सकता है। या कोई भी दस्तावेज़ को परिवर्तनशील बना सकता है लेकिन फिर भी अनकहा हुआ है। या रंग और अनुवाद दोनों। आदि।
इस "यूटिल" लाइब्रेरी के माध्यम से देखते हुए, मैं देखता हूं कि लगभग सभी संभावित अलग-अलग पुस्तकालयों में ऐसी वैकल्पिक विशेषताएं हैं जो उन्हें अन्य पुस्तकालयों से जोड़ देती हैं। अगर मुझे वास्तव में उन पुस्तकालयों की निर्भरता के रूप में आवश्यकता होती है, तो सामान की यह वाड वास्तव में बिल्कुल भी अछूता नहीं है: यदि आप सिर्फ एक का उपयोग करना चाहते हैं, तो आपको मूल रूप से सभी पुस्तकालयों की आवश्यकता होगी।
क्या .NET में ऐसी वैकल्पिक निर्भरता के प्रबंधन के लिए कोई स्थापित दृष्टिकोण हैं?