आइए कहें कि मेरे पास एक ऐसा प्रोग्राम है जिसमें बड़ी संख्या में कॉन्फ़िगरेशन विकल्प हैं। उपयोगकर्ता उन्हें एक कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट कर सकता है। मेरा प्रोग्राम इस कॉन्फ़िगरेशन फ़ाइल को पार्स कर सकता है, लेकिन यह आंतरिक रूप से विकल्पों को कैसे स्टोर और पास करना चाहिए?कई कॉन्फ़िगरेशन विकल्पों के साथ प्रोग्राम कैसे डिज़ाइन करें?
मेरे मामले में, सॉफ़्टवेयर का उपयोग वैज्ञानिक सिमुलेशन करने के लिए किया जाता है। लगभग 200 विकल्प हैं जिनमें से अधिकांश में सेन डिफ़ॉल्ट हैं। आम तौर पर उपयोगकर्ता को केवल एक दर्जन या तो निर्दिष्ट करना होता है। मुझे जिस कठिनाई का सामना करना पड़ता है वह है कि मेरा आंतरिक कोड कैसे डिज़ाइन किया जाए। कई वस्तुओं को बनाने की आवश्यकता है जो कई विन्यास विकल्पों पर निर्भर करते हैं। उदाहरण के लिए किसी ऑब्जेक्ट को कई पथों की आवश्यकता हो सकती है (जहां डेटा संग्रहीत किया जाएगा), कुछ विकल्प जिन्हें ऑब्गोरिदम को पारित करने की आवश्यकता होती है, ऑब्जेक्ट कॉल करेंगे, और कुछ विकल्प जो सीधे ऑब्जेक्ट द्वारा उपयोग किए जाते हैं।
इससे वस्तुओं को बनाने के लिए बहुत बड़ी संख्या में तर्क की आवश्यकता होती है। इसके अतिरिक्त, चूंकि मेरा कोडबेस बहुत सक्रिय विकास में है, इसलिए कॉल स्टैक के माध्यम से जाने और इसे एक नए कॉन्फ़िगरेशन विकल्प के साथ पास करने के लिए एक बड़ा दर्द है जहां इसकी आवश्यकता होती है।
उस दर्द को रोकने का एक तरीका वैश्विक कॉन्फ़िगरेशन ऑब्जेक्ट होना है जिसे कोड में कहीं भी आसानी से उपयोग किया जा सकता है। मुझे विशेष रूप से इस दृष्टिकोण को पसंद नहीं है क्योंकि यह उन कार्यों और वर्गों की ओर जाता है जो कोई भी (या केवल एक) तर्क नहीं लेते हैं और यह पाठक के लिए स्पष्ट नहीं है कि कार्य/वर्ग किस डेटा से संबंधित है। यह कोड पुन: उपयोग को रोकता है क्योंकि सभी कोड एक विशाल कॉन्फ़िगरेशन ऑब्जेक्ट पर निर्भर करता है।
किसी को भी मुझे कैसे इस तरह एक कार्यक्रम संरचित किया जाना चाहिए के बारे में कुछ सलाह दे सकते हैं?
class A:
def __init__(self, config):
self.config = config
def foo(self, arg):
algo(arg, config)
उदाहरण पायथन लेकिन मेरे में हैं:
class A:
def __init__(self, opt_a, opt_b, ..., opt_z):
self.opt_a = opt_a
self.opt_b = opt_b
...
self.opt_z = opt_z
def foo(self, arg):
algo(arg, opt_a, opt_e)
यहाँ वैश्विक config शैली का एक उदाहरण है:
यहाँ मैं विन्यास विकल्प गुजर शैली के लिए क्या मतलब का एक उदाहरण है प्रश्न किसी भी समान प्रोग्रामिंग लैंगेज के लिए खड़ा है।
वैश्विक कॉन्फ़िगरेशन ऑब्जेक्ट एक साथ सभी कोड जोड़ता है। कार्यक्रम को अधिक मॉड्यूलर होना अच्छा लगेगा। मुझे @HYRY द्वारा दिखाया गया समाधान पसंद है। यह दोनों दुनिया के सर्वश्रेष्ठ की तरह लगता है। – qsc