मेरे पास कुछ वैश्विक घटक हैं, मुझे यकीन नहीं है कि उन्हें डिज़ाइन में कैसे रखा जाए। जैसे:सेटर इंजेक्शन या परिवेश संदर्भ पैटर्न
सेटिंग्स वर्ग: यह कार्यक्रम के प्रारंभिक सेटिंग्स इंटरफ़ेस करता है, यह app.config जा सकता है (1way), web.config (1way), हार्ड कोडित मूल्यों (1way), या दृश्यों के पीछे sqldb (2way)।
भाषा वर्ग: यह अलग भाषा सेट शामिल है, और फिर, मैं इसके पीछे कुछ resx फ़ाइलें (1way), हार्ड कोडित मूल्यों (1way) या sqldb (2way) हो सकता था।
पहला सवाल, है मैं निर्भरता इंजेक्शन में इन कक्षाओं सेटर गुण (मैं विंडसर का उपयोग करें) बनाना चाहिए:
string DoSomethingAndReportIt() {
//do something ...
var param = Settings.Current.SomeParam;
//report it ...
return Language.Current.SomeClass_SomeMethod_Job_Done;
}
मैं:
public ISettings Settings {set;}
public ILanguage Language {set;}
या मैं उन्हें परिवेश संदर्भ बनाना चाहिए ध्यान दें कि .NET लाइब्रेरी में कुछ घटक हैं जो वास्तव में परिवेश संदर्भ पैटर्न का उपयोग करते हैं, उदाहरण के लिए System.Security.Principal, System.Web.ProfileBase, System.Thread.CurrentCulture ...
क्या आपको लगता है कि मेरे वैश्विक वर्ग जैसे सेटिंग्स और भाषा को परिवेश संदर्भ कक्षाएं बनाने के लिए कोई नुकसान नहीं है? यदि नहीं, तो डीआई क्यों पसंद किया जाता है? क्या वे इकाई परीक्षण में परिवेश की तुलना में अधिक लाभ लेते हैं?
दूसरा प्रश्न यह है कि यदि डी बेहतर है, (मुझे लगता है कि डी पैटर्न को प्राथमिकता दी जाती है), सुरक्षा जैसे मौजूदा परिवेश वर्गों को प्रॉक्सी करने का एक अच्छा तरीका क्या है। प्रिंसिपल या प्रोफाइल डी पैटर्न का पालन करने के लिए?
आपको परिवेश संदर्भ क्यों पसंद नहीं है? – Ziv