कॉन्स्टैंट बनाम कॉन्फिग फाइल का इस्तेमाल कब करें ताकि कॉन्फिगरेशन को बनाए रखा जा सके


20

मैं अक्सर अपने आप से लड़ता हूँ कि क्या मुझे अपने web.config में या कांस्टेन्सेंट्स में कुछ चाबियाँ डालनी हैं। क्लास या ऐसा कुछ।

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

आप कॉन्‍फ़ि‍न्‍स कुंजियों को कॉन्‍फ़‍िगर कीज का उपयोग कब करना चाहेंगे?

यह प्रश्न वास्तव में मेरे विचार से किसी भी भाषा पर लागू होता है।

जवाबों:


20

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

यदि एप्लिकेशन कमांड लाइन तर्क लेता है, तो वे कॉन्फ़िगरेशन फ़ाइल मापदंडों को उलट देंगे।


3

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

तो मैं सुझाव दूंगा:

  • मान जो कोड में स्थिरांक के रूप में सभी प्रतिष्ठानों में समान होंगे। उन्हें एक स्थिरांक कक्षा में रखने के कुछ फायदे हैं (आप आसानी से विभिन्न मूल्यों को देखने के लिए देख सकते हैं कि वे कैसे काम करते हैं) और उन्हें उस मॉड्यूल में डालते हैं जो उनका उपयोग करता है (आपको उस मॉड्यूल को संशोधित करते समय एक और फ़ाइल खोलने की आवश्यकता नहीं है) एक फ़ाइल से बचना जो हर कोई संस्करण नियंत्रण में संघर्ष का कारण बनता है) को संपादित करेगा।
  • मान (जो) फ़ाइल को कॉन्फ़िगर करने के लिए प्रति स्थापना परिवर्तित करने की आवश्यकता हो सकती है। और आप शायद वैसे भी कोड में डिफ़ॉल्ट रखना चाहते हैं, इसलिए यदि कॉन्फ़िगरेशन में मान सेट नहीं किया गया है, तब भी एप्लिकेशन (किसी तरह) काम करता है।

आपका क्या मतलब है सही प्रकार ... कॉन्फिग कीज़ ... यह xml है ...
WeDoTDD.com

@ कॉफ़ी एडिक्ट: सही प्रकार का अर्थ है, यदि आपके पास विकल्प है जिसके लिए एक नंबर की आवश्यकता है और आपकी कॉन्फ़िग फ़ाइल में गैर-संख्यात्मक स्ट्रिंग है, तो आप रनटाइम तक नहीं पाएंगे। और XML डिवाइस पथ के मामले में "कॉन्फिग की" जो भी आप कॉन्फिगर फाइल से वैल्यू को पुनः प्राप्त करने के लिए उपयोग करते हैं। ठीक है, आपके पास एक स्कीमा और संबंधित वर्ग हो सकता है ( xsdदूसरे से एक उत्पन्न करने के लिए उपकरण है) और कॉन्फ़िगर का उपयोग करें XMLSerializer(सी # वैसे भी XML को संभालने के लिए सबसे समझदार तरीका है), इसलिए आप पहले से मान्य कर सकते हैं, लेकिन यह अभी भी कुछ अतिरिक्त है काम।
Jan Hudec

असहमत: "कॉन्‍फ़‍िगरेशन फ़ाइल में मान स्थिरांक श्रेणी में मान बनाए रखने के लिए कठिन है" - यह इस बात पर निर्भर करता है कि आपने अपने कॉन्फ़िगरेशन को कैसे कोडित किया है और आपके पास इनमें से कितने कॉन्फ़िगर किए गए आइटम हैं: खुद को दोहराएं नहीं!
इंजीनियर

3

अधिकांश मामलों में बदलते हुए स्थिरांक को फिर से निर्माण की आवश्यकता होती है। जब कोई व्यक्ति कोड तक पहुंच नहीं रखता है, तो दूसरा तरीका रखें, स्थिरांक स्थिर रहता है।

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

वे तत्व जो ऑब्जेक्ट के अमूर्त होने का हिस्सा नहीं हैं (अर्थात यदि स्थिरांक जो बाह्य (कॉलिंग) ऑब्जेक्ट द्वारा संशोधित नहीं किए जाने की संभावना है, छिपी होने की संभावना है और अनिवार्य रूप से इसका मतलब है कि वे कॉन्फिग फाइलों की तुलना में निजी स्थिरांक के रूप में बेहतर होंगे।

जब कई विन्यास तत्व होते हैं जो अलग-अलग वस्तुओं से संबंधित होते हैं, एक-दूसरे से संबंधित नहीं होते हैं, और जब बहुत सारी वस्तुओं को बाहर निकालने की आवश्यकता होती है (समान या अपने) विन्यास फाइल, संभावना है कि ये चीजें लगातार होनी चाहिए।


1

अंगूठे का एक सरल नियम यह है कि जब आप जानते हैं कि आप उन मूल्यों के एक निश्चित समूह के साथ काम करेंगे, जिन्हें आप जानते हैं कि उन्हें किसी भी संदर्भ के लिए बदलने की आवश्यकता के बिना लागू किया जा सकता है; बाकी सभी चीजों के लिए बाहरी विन्यास प्रदान करें।

स्थिरांक का एक अच्छा उदाहरण होगा यदि आपके द्वारा काम किए गए सभी आकार SQUAREया तो हो सकते हैं ROUND। अधिकांश भाषाओं में, आप इस तथ्य का लाभ उठाने में सक्षम होंगे कि यह मान समय के साथ नहीं बदलता है, केवल एक बार इसे आवंटित करके और यह एक्सेस करने के तरीके का अनुकूलन करके।

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



0

परिभाषा के अनुसार एक स्थिरांक एक मान के लिए एक स्मृति स्थान है जिसे बदलना नहीं चाहिए (जैसे पीआई)।

मेरा मानना ​​है कि आपका मतलब 'पैरामीटर' है और स्थिर नहीं है

क्या कहा गया है इसके अलावा, ध्यान दें कि कॉन्फ़िगरेशन फ़ाइल से उपयोगकर्ता इनपुट के लिए चर को उजागर करने से एप्लिकेशन को नुकसान हो सकता है।

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

यदि आप कभी भी डेटा स्टोर करने के लिए कॉन्फ़िग फाइल्स का उपयोग करते हैं, तो सुनिश्चित करें कि आप उन्हें संस्करण बनाते हैं।

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