कॉन्फ़िगरेशन सेटिंग्स समस्या को किस डिज़ाइन पैटर्न पर लागू किया जा सकता है?


83

बड़े और जटिल सॉफ्टवेयर उत्पादों में विन्यास योग्य सेटिंग्स का प्रबंधन एक बड़ा दर्द बन जाता है। समस्या के लिए मैंने दो दृष्टिकोण देखे हैं:

  • सिस्टम में प्रत्येक घटक को विन्यास फाइल या रजिस्ट्री सेटिंग्स से अपना विन्यास लोड करना है।
  • एक सेटिंग लोडर वर्ग है जो सभी विन्यास योग्य सिस्टम सेटिंग्स को लोड करता है और प्रत्येक घटक को सेटिंग्स के लिए सेटिंग लोडर को क्वेरी करता है।

ये दृष्टिकोण मेरे लिए गलत लगता है।

क्या कोई डिज़ाइन पैटर्न है जिसका उपयोग समस्या को सरल बनाने के लिए किया जा सकता है? शायद कुछ ऐसा है जो निर्भरता इंजेक्शन तकनीक का लाभ उठाएगा।


4
आपको क्यों लगता है कि विकल्प 2 गलत है?
कैओसपांडियन

2
यह आमतौर पर एक सिंगलटन के रूप में लागू किया जाता है, हालांकि इसे लागू करने के अन्य तरीके हैं।
डैनियल बिंगहैम

जवाबों:


47

मैं क्वेरी सेट करने, लोड करने और सहेजने के लिए एक इंटरफ़ेस बनाना पसंद करता हूं। निर्भरता इंजेक्शन का उपयोग करके, मैं इसे उस प्रत्येक घटक में इंजेक्ट कर सकता हूं जिसकी आवश्यकता है।

यह कॉन्फ़िगरेशन रणनीति को बदलने के मामले में लचीलापन देता है, और हर चीज के लिए काम करने के लिए एक सामान्य आधार देता है। मैं इसे एकल, वैश्विक "सेटिंग्स लोडर" (आपका विकल्प 2) के लिए पसंद करता हूं, खासकर जब से मुझे एक घटक के लिए कॉन्फ़िगरेशन तंत्र को ओवरराइड कर सकता है अगर मुझे ऐसा करने की आवश्यकता है।


7
हैलो, यह अच्छा होगा अगर यू कुछ नमूना साझा करें :)
issamux

20

मैं वर्तमान में एक ऐसी प्रणाली पर काम कर रहा हूं जहां कॉन्फ़िगरेशन को एक वैश्विक सिंगलटन ऑब्जेक्ट द्वारा प्रबंधित किया जाता है जो कॉन्फ़िगरेशन कुंजियों के मानचित्र को मूल्यों पर रखता है। सामान्य तौर पर, मैं चाहता हूं कि यह इस तरह से नहीं किया गया था क्योंकि यह प्रणाली में संगामिति बाधाओं का कारण बन सकता है और यह इकाई परीक्षण, आदि के लिए मैला है।

मुझे लगता है कि रीड कोपसी का अधिकार है (मैंने उसे वोट दिया), लेकिन मैं निश्चित रूप से मार्टिन फाउलर के भरोसेमंद इंजेक्शन पर महान लेख पढ़ने की सिफारिश करूंगा:

http://martinfowler.com/articles/injection.html

एक मामूली परिशिष्ट भी ... यदि आप किसी भी नकली वस्तु प्रकार इकाई परीक्षण करना चाहते हैं, तो निर्भरता इंजेक्शन निश्चित रूप से जाने का रास्ता है।


ऐसा लगता है कि डेकोरेटर आपकी जरूरतों से मेल खाता है। आप एक सीरियल डेकोरेटर बना सकते हैं जो कक्षाओं को अपने तरीके से क्रमबद्ध बनाने में सक्षम होगा। रणनीति का उपयोग सभी वस्तुओं को क्रमांकन के लिए अपनी रणनीति बनाने के लिए किया जा सकता है। जिन वस्तुओं को क्रमबद्ध करने की आवश्यकता नहीं है, वे अनदेखी रणनीति का उपयोग कर सकते हैं। जिन्हें केवल अपने क्षेत्र में ही फील्ड्स रणनीति और इतने पर सीरियल बनाने की जरूरत है। आप ll be flexible with adding new things to your config. Sure as all approaches this have itपेशेवरों और विपक्ष।
यारोस्लाव याकोवले

4

इस बारे में कैसा है। आप एक एकल विधि कॉन्फ़िगर (विन्यास) के साथ एक विन्यास विन्यास को परिभाषित करते हैं। कॉन्फ़िगरेशन तर्क बस एक हैशटेबल है जो कॉन्फ़िगरेशन मानों के नाम को उनके मूल्यों के साथ जोड़ता है।

रूट ऑब्जेक्ट किसी भी तरह से एक विन्यास हैशटेबल बना सकते हैं जो वे चाहते हैं (उदाहरण के लिए: इसे एक कॉन्फ़िगरेशन फ़ाइल से पढ़ना)। इस हैशटेब में रूट ऑब्जेक्ट istt के लिए कॉन्फ़िगरेशन पैरामीटर हो सकते हैं, साथ ही कोई भी पैरामीटर जो इसके घटकों, उप-घटकों, उप-उप-घटकों (आदि) का उपयोग कर सकता है।

रूट ऑब्जेक्ट तब अपने सभी विन्यास योग्य घटकों पर कॉन्फ़िगर (कॉन्फ़िगरेशन) को आमंत्रित करता है।


0

आप एक इंटरफ़ेस के कई कार्यान्वयन बना सकते हैं जो कॉन्फ़िगर लोडर को परिभाषित करता है। मूल रूप से रणनीति पैटर्न जहां आप एक बुनियादी इंटरफ़ेस को कॉन्फ़िगरऑलर के रूप में परिभाषित कर सकते हैं और फिर आगे अलग-अलग कार्यान्वयन जैसे कि फाइलसिस्टमलॉडर, क्लासपैथलॉडर, एन्वारीएबेल्सलॉडर आदि इस लिंक पर विवरण।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.