कॉन्फ़िगरेशन के लिए मेरा दृष्टिकोण? यह अक्सर खराब और बहुत आकस्मिक रूप से किया जाता है - टीसीओ बढ़ाना क्योंकि उपयोगकर्ता कॉन्फ़िगर करने योग्य मानों के 100s को ग्रोक करने का प्रयास करते हैं। आवश्यक साबित होने पर केवल कॉन्फ़िगरेशन (सॉफ्ट कोडिंग) जोड़ें।
जब आवश्यक हो ... एक कॉन्फ़िगर करने योग्य मान को उपयोगकर्ता इनपुट के समान अविश्वास के साथ इलाज किया जाना चाहिए, और इनपुट खराब होने पर स्पष्ट त्रुटि संदेश प्रदान करना चाहिए।अधिकांश घटकों को कॉन्फ़िगरेशन इंफ्रास्ट्रक्चर से अलग किया जाना चाहिए - जैसे कि आप किसी डेटा एक्सेस इंफ्रास्ट्रक्चर से अधिकतर घटक अलग करते हैं। कॉन्फ़िगरेशन आधारभूत संरचना से अलग हो जाने पर, आप परीक्षण कर सकते हैं और यह जांच कर सकते हैं कि घटक कॉन्फ़िगरेशन सिस्टम से विभिन्न "इनपुट" को कैसे संभालता है। सबसे महत्वपूर्ण, कार्यक्रम को पूर्ण न्यूनतम विन्यास के साथ ठीक काम करना चाहिए।
हालांकि, विरोधी पैटर्न के इस प्रकार बहुत आम है:।
File.Open(configuration["widgetsFileStorage"] + "/" + widgetImage)
या यह (यदि आप कभी भी एक href में सीधे उपयोगकर्ता इनपुट डाल मैं नहीं किसी भी तरह, कई लोगों कॉन्फ़िगरेशन मान अब तक पर भरोसा होगा बहुत ज्यादा)।
LinkWriter.href=configuration["supportUrl"]
कॉन्फ़िगर करने के लिए कब? जैसा कि आप साबित करते हैं कि आपको इसकी आवश्यकता है। चिंताओं का अच्छा अलगाव बाद के बिंदु पर एक मूल्य विन्यास योग्य बनाना आसान बना देगा। मैं फाइल लोकेटर में फाइल ढूंढने की ज़िम्मेदारी छोड़ दूंगा।
File.Open(new WidgetFileLocater().GetUncPath(widgetImage))
कहीं मेरे फ़ाइल लोकेटर के पीछे मैं एक कॉन्फ़िगरेशन फ़ाइल, डेटाबेस का उल्लेख कर सकता हूं या नहीं। मैं शायद एप्लिकेशन निर्देशिका में "छवियों" निर्देशिका में हार्ड कोडिंग शुरू करूंगा। कॉन्फ़िगरेशन तब आता है जब हमारे पास लचीलापन के लिए उपयोग केस होता है (कोई इसे SAN पर रखना चाहता है?) लेकिन पहले नहीं। वैसे भी, अधिकांश ऐप को यह नहीं होना चाहिए कि यह कॉन्फ़िगर किया गया है या नहीं। मैं फ़ाइल लोकेटर पर कुछ निर्भरता इंजेक्शन का उपयोग यह सत्यापित करने के लिए करता हूं कि यह कॉन्फ़िगरेशन फ़ाइल से सही ढंग से लुसी इनपुट को संभाला जाए।
इसके अलावा: कॉन्फ़िगरेशन लगभग हमेशा ढीला टाइप किया गया है, संकलित नहीं है, और इस प्रकार कोड से कहीं अधिक खतरनाक है। डेवलपर्स द्वारा इस जोखिम का शायद ही सम्मान किया जाता है (लेकिन सिसाडमिन द्वारा अत्यधिक सम्मानित)। मैंने विन्यास आवश्यकताओं के लिए पाइथन/लोहेपीथॉन/बू जैसे स्क्रिप्ट भाषा का उपयोग करके बहस की है। मुझे संकलन के बाद सामान बदलने की क्षमता मिल जाएगी, एक बहुत अधिक मुफ्त वाक्यविन्यास और एक्सएमएल या टेक्स्ट की तुलना में टाइपिंग की जांच होगी।
चेतावनी: मेरा दृष्टिकोण एक पुनरावृत्ति रिलीज चक्र मानता है। यदि आपके पास माइक्रोसॉफ्ट की तरह 2-10 साल का रिलीज चक्र है, तो आप कई और मूल्यों को कॉन्फ़िगर करने के पक्ष में पूर्वाग्रह करना चाहते हैं।
कुछ कॉर्पोरेट वातावरण में मुझे पता है कि नौकरी को लंबे समय तक रखने के लिए लोग जानबूझकर अपने कोड को कोड देते हैं। – Jeff
विषयपरक टैग जोड़ा गया –
और मुझे यह सोच रहा था कि विषय मुश्किल कोडिंग था! – SteveL