किस बिंदु पर एक विन्यास फाइल एक प्रोग्रामिंग भाषा बन जाती है?


90

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

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

अब जब मैं मंच बनाने के लिए तैयार हो गया, तो यहाँ मेरे सवाल हैं:

  1. कॉन्फिग फाइल का असली उद्देश्य क्या है?
  2. क्या विन्यास फाइल को सरल रखने का प्रयास किया जाना चाहिए?
  3. उन्हें (डेवलपर्स, उपयोगकर्ता, व्यवस्थापक, आदि) में परिवर्तन करने के लिए कौन जिम्मेदार होना चाहिए?
  4. क्या उन्हें स्रोत नियंत्रित किया जाना चाहिए (प्रश्न 3 देखें)?

जैसा कि मैंने पहले कहा था कि इन सवालों के मेरे जवाब लगातार बदलते हैं, लेकिन अभी मैं सोच रहा हूं:

  1. एक गैर-प्रोग्रामर को व्यवहार के बड़े हिस्से को जल्दी से बदलने की अनुमति देने के लिए
  2. हां, कुछ भी जो मोटे अनाज का नहीं है, कोड में होना चाहिए
  3. उपयोगकर्ताओं को विन्यास फाइल के लिए जिम्मेदार होना चाहिए और प्रोग्रामर को विन्यास फाइल और कोड के बीच एक विन्यास परत के लिए जिम्मेदार होना चाहिए जो अनुप्रयोग के अधिक बारीक नियंत्रण देता है।
  4. नहीं, लेकिन महीन दाने वाली मध्यम परत होनी चाहिए

23
जब वे ट्यूरिंग-पूर्ण हो जाते हैं, तो निश्चित रूप से!
ऐब

2
नियमित अभिव्यक्तियाँ ट्यूरिंग-पूर्ण नहीं हैं, लेकिन फिर भी उन्हें कंप्यूटर भाषा माना जाता है।
चास।

"फाइल" कुछ विन्यास स्थितियों के लिए वास्तव में पर्याप्त नहीं हैं। इसलिए gconf जैसी प्रणालियों का अस्तित्व।
अली अफशर

1
Gconf और फ़ाइल के बीच कोई वास्तविक अंतर नहीं है। Gconf वास्तव में मेमोरी मेमोरी में उनके साथ फाइलों के साथ निर्देशिकाओं की एक श्रृंखला है। यहां तक ​​कि अगर आपको आरडीबीएमएस लाना था, तो इसे एक एकल फ़ाइल द्वारा प्रस्तुत किया जा सकता है। मुद्दा यह है कि कॉन्फिग फाइल में कितनी जटिलता सुरक्षित / अच्छी है।
चास। ओवंस

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

जवाबों:


40

बहुत दिलचस्प सवाल!

मैं अपनी कॉन्फिग फाइलों को बहुत ही सरल "की = वैल्यू" फॉर्मेट में सीमित करता हूं, क्योंकि मैं आपसे पूरी तरह सहमत हूं कि कॉन्फिग फाइल्स बहुत जल्दी फुल-ब्लो प्रोग्राम बन सकती हैं। उदाहरण के लिए, जिस किसी ने कभी भी OpenSER को "कॉन्फ़िगर" करने की कोशिश की है वह जानता है कि आप जिस भावना के बारे में बात कर रहे हैं: वह कॉन्फ़िगरेशन नहीं है, यह (दर्दनाक) प्रोग्रामिंग है।

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

तो, आपके सवालों के जवाब देने के लिए:

  1. कॉन्फिग फाइल का असली उद्देश्य क्या है?

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

  2. क्या विन्यास फाइल को सरल रखने का प्रयास किया जाना चाहिए?

    निश्चित रूप से। जैसा कि आपने सुझाव दिया था, एक विन्यास फाइल में "प्रोग्रामिंग" भयानक है। मेरा मानना ​​है कि इससे बचना चाहिए।

  3. उन्हें (डेवलपर, उपयोगकर्ता, व्यवस्थापक, आदि) में परिवर्तन करने के लिए कौन जिम्मेदार होना चाहिए?

    सामान्य तौर पर, मैं कहना चाहूंगा कि कौन आवेदन को तैनात करता है।

  4. क्या उन्हें स्रोत नियंत्रित किया जाना चाहिए (प्रश्न 3 देखें)?

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


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


10

ठीक। आपके पास कुछ उपयोगकर्ता होंगे जो वास्तव में सरल कॉन्फ़िगरेशन चाहते हैं, आपको उन्हें देना चाहिए। उसी समय, आपके पास "क्या आप इसे जोड़ सकते हैं? मैं कॉन्फ़िगर फ़ाइल में कैसे करूँ?" के निरंतर अनुरोध होंगे, मैं नहीं देखता कि आप दोनों समूहों का समर्थन क्यों नहीं कर सकते।

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

आप ध्यान दें कि यह मुख्य रूप से महत्वपूर्ण = मूल्य कथन है, जहाँ मूल्य Lua के अंतर्निहित प्रकारों में से कोई भी हो सकता है। सबसे जटिल बात वहाँ सूचियाँ हैं, और वे वास्तव में जटिल नहीं हैं (यह सिर्फ वाक्य रचना की बात है)।

अब मैं किसी के लिए यह पूछने का इंतजार कर रहा हूं कि अपने सर्वर के पोर्ट को यादृच्छिक मूल्य पर सेट करने के लिए हर बार जब वे इसे शुरू करते हैं ...


1
एक वास्तविक प्रोग्रामिंग भाषा का उपयोग करने के लिए +1, दूर की फ़ाइल से किसी एक को बढ़ने देने की तुलना में दूर
बेंजामिन कॉन्फिनो

+1 - यह सही तरीका है। Lua उन लोगों के लिए एक बहुत ही "कॉन्फिग-जैसा" सिंटैक्स है जो नए हैं। और जो नहीं हैं उनके लिए शक्तिशाली जोड़तोड़ की अनुमति देता है।
एंड्रयू वाई

8

हाल ही में मैं एक परियोजना पर काम कर रहा था और मुझे एहसास हुआ कि मैं अपनी कॉन्फ़िगरेशन फ़ाइल के अंदर सशर्त होना चाहता था - जो पहले सिर्फ एक बहुत ही सरल रूप था।


key = val
key2 = val
name = `hostname`

मैं एक लघु-भाषा लिखना नहीं चाहता था, क्योंकि जब तक मैंने इसे बहुत सावधानी से नहीं किया, मैं लचीलेपन की अनुमति नहीं दे सकता था जो उपयोगी होगा।

इसके बजाय मैंने फैसला किया कि मेरे दो रूप होंगे:

  1. यदि फ़ाइल "#!" से शुरू होती है और निष्पादन योग्य था मैं इसे चलाने के परिणाम को पार्स करूंगा।

  2. नहीं तो मैं इसे पढ़ता हूँ

इसका मतलब है कि मैं अब लोगों को "कॉन्फ़िगरेशन फ़ाइलें" लिखने की अनुमति दे सकता हूं जो इस तरह दिखती हैं:

 #!/usr/bin/perl
if ( -x /bin/foo ) 
{
   print <<EOF;
foo=me
bar=you
EOF
}
else
{
   print <<EOF;
foo=bar
bar=foo
EOF
}

इस तरह मुझे एक डायनेमिक कॉन्फ़िगरेशन फ़ाइल की शक्ति मिलती है यदि उपयोगकर्ता इसका उपयोग करना चाहता है, और अपनी खुद की मिनी-भाषा लिखने की सरलता नहीं है।


4

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


3

मेरे पास कॉन्फ़िग फ़ाइलों के बारे में एक अलग दर्शन है। किसी एप्लिकेशन को कैसे चलाया जाना चाहिए इसके बारे में डेटा अभी भी डेटा है , और इसलिए डेटा स्टोर में है, कोड में नहीं (एक कॉन्फ़िगरेशन फ़ाइल IMO कोड है)। यदि अंत उपयोगकर्ताओं को डेटा को बदलने में सक्षम होना चाहिए, तो एप्लिकेशन को ऐसा करने के लिए एक इंटरफ़ेस प्रदान करना चाहिए।

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


3

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

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


2

यहाँ मेरे विचार हैं:

  1. किसी एप्लिकेशन के रनटाइम व्यवहार को आसानी से संशोधित करने की अनुमति देना। यह प्रोग्रामर या गैर प्रोग्रामर द्वारा, जरूरतों के आधार पर हो सकता है। यह विकास के दौरान हो सकता है, लेकिन मैं अक्सर किसी भी बिंदु पर प्रोग्राम को अधिक लचीला बनाने में मदद करने के लिए कॉन्फ़िगरेशन फ़ाइलों को देखता हूं।

  2. हाँ। मुझे लगता है कि कॉन्फ़िगर फ़ाइलों को यथासंभव सरल होना चाहिए, यह देखते हुए कि आपके रनटाइम के विभिन्न व्यवहारों को नियंत्रित करने के लिए आपको विभिन्न विकल्पों की आवश्यकता हो सकती है। मैं कॉन्फ़िगरेशन सेटिंग्स को समूहीकृत करना और उन्हें यथासंभव सरल बनाना पसंद करता हूं।

  3. निर्भर करता है कि क्या और क्यों बदलाव किया जा रहा है। यदि उपयोगकर्ता इसे बदलने जा रहे हैं, तो उन्हें विवरण से छिपाने के लिए एक फ्रंट-एंड बनाया जाना चाहिए। सामान्य तौर पर गैर-डेवलपर्स के बारे में भी यही सच है।

  4. मैं अक्सर "डिफ़ॉल्ट" कॉन्फ़िगरेशन को नियंत्रित करता हूं, लेकिन वास्तविक रनटाइम के लिए इस सिस्टम को ओवरराइड करने का एक तरीका है।

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


2

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

  • या तो मैं ऑपरेटिंग सिस्टम की कॉन्फिगरेशन फेनिलिटी का उपयोग करता हूं (जैसे कि एक plist, या gconf या जो भी उपयुक्त हो),
  • या एक साधारण फ्लैट फ़ाइल, जैसा कि शेल्फ आईएनआई पार्सर की तरह कुछ द्वारा नियंत्रित किया जा सकता है।
  • बुलेट को काटें और एक हल्के वजन की भाषा के पार्सर को प्लग करें, आमतौर पर लुआ, कभी-कभी आवेदन में झुक जाता है,
  • या SQLite या इसी तरह के रिलेशनल डेटाबेस में डेटा स्टोर करें।

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

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


1

यह इस बात पर निर्भर करता है कि आप टीम के अन्य डेवलपर्स से क्या सहमत हैं। क्या आप कॉन्फिग फाइल का उपयोग सिर्फ कॉन्फिगर फाइल के रूप में कर रहे हैं या आप एक मॉडल संचालित एप्लिकेशन बना रहे हैं ।

विन्यास फ़ाइल के लक्षण एक प्रोग्रामिंग भाषा बनते हैं:

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

1

फ़ाइलों को बदसूरत रूप से इंच करें बदसूरत, अतार्किक "पूर्ण विकसित प्रोग्रामिंग भाषाओं" के लिए। यह अच्छी प्रोग्रामिंग भाषाओं को डिजाइन करने के लिए कला और कौशल लेता है, और कॉन्फ़िगर भाषाओं ने प्रोग्रामिंग भाषा को भयानक बना दिया है।

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


1

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

यहाँ आपके प्रश्न के उत्तर हैं:

  • कॉन्फिग फाइल का असली उद्देश्य क्या है?

एक कॉन्फ़िगरेशन फ़ाइल उपयोगकर्ता को रन-टाइम पर अपने प्रोग्राम के व्यवहार को अनुकूलित करने की अनुमति देने का एक तरीका है।

  • क्या विन्यास फाइल को सरल रखने का प्रयास किया जाना चाहिए?

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

  • उन्हें (डेवलपर्स, उपयोगकर्ता, व्यवस्थापक, आदि) में परिवर्तन करने के लिए कौन जिम्मेदार होना चाहिए?

मुझे लगता है कि इसका उत्तर आपके संगठन पर निर्भर करता है। यह सुनिश्चित करने के लिए सॉफ़्टवेयर को तैनात करने वाले व्यक्ति की ज़िम्मेदारी होनी चाहिए कि वह ठीक से कॉन्फ़िगर हो।

  • क्या उन्हें स्रोत नियंत्रित किया जाना चाहिए (प्रश्न 3 देखें)?

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


1

मैं अजगर कार्यक्रमों को देखा है जहां कॉन्फ़िग फ़ाइल है कोड। यदि आपको कुछ विशेष (सशर्त, आदि) करने की आवश्यकता नहीं है, तो यह अन्य विन्यास शैलियों से बहुत अलग नहीं है। जैसे मैं config.pyसामान के साथ एक फ़ाइल बना सकता है जैसे:

num_threads = 13
hostname = 'myhost'

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


0

हां, कॉन्फ़िगर फाइलें सरल होनी चाहिए। उन्हें स्वयं कोई 'तर्क' नहीं होना चाहिए - यदि वे बयानों में अभिव्यक्तियों की सूची के रूप में सोचते हैं, तो उनकी संपूर्णता में सशर्त कथन नहीं।

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


0

Microsoft में "ओस्लो" कार्य का एक उद्देश्य इस मुद्दे के समाधान की अनुमति (हालांकि आवश्यकता नहीं) है।

  1. एक एप्लिकेशन इसमें शामिल किसी भी नए घटकों के मॉडल के साथ जहाज होगा। यह मौजूदा मॉडल का भी उपयोग करेगा। उदाहरण के लिए, इसमें एक वेब सेवा शामिल हो सकती है, इसलिए यह वेब सेवा के सिस्टम मॉडल का पुन: उपयोग कर सकता है।
  2. मॉडल में उन्हें वर्णन करने वाले मेटाडेटा शामिल होंगे, जिनमें उपकरण तक पहुंचने के लिए पर्याप्त जानकारी भी शामिल है, या तो पाठयक्रम या आलेखीय रूप से।
  3. मॉडल के भाग "विन्यास" के अनुरूप होंगे

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


0

मैं विरोधाभासी हो जाऊंगा और यह केवल एक भाषा प्रस्तुत करूंगा जब यह XML से अधिक का प्रतिनिधित्व करता है। या जब XML को एक भाषा माना जाता है।

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

अंत में, "भाषा" एक स्क्विशी अमूर्त है, लेकिन हाँ, किनारों अस्पष्ट हैं।


0

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

हमें इस जटिल वातावरण से निपटने के लिए बेहतर कोड लिखना होगा, इसलिए हमारे अनुप्रयोगों का कोड अधिक महत्वपूर्ण हो जाता है ...


0

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


0

विन्यास फाइल : "मेरा उद्देश्य क्या है?"
आप : "मक्खन को कॉन्फ़िगर करें।"
विन्यास फाइल : "ठीक है ..."
विन्यास फाइल : "मेरा उद्देश्य क्या है?"
आप : "आप मक्खन को कॉन्फ़िगर करते हैं।"
विन्यास फाइल : "ओह माय गॉड।"

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

  2. हां और ना। क्या आपको अपने आवेदन के कोड को सरल बनाने के लिए प्रयास करना चाहिए? हाँ। आपको वह सब कुछ करने का प्रयास करना चाहिए जिसे आप सरल और बिंदु पर लिखते हैं। इससे अधिक जटिल होने की आवश्यकता नहीं है। वही आपके कॉन्फिग का सच है। हालाँकि, यह बहुत ही विशिष्ट अनुप्रयोग है। हार्डकोडिंग जो कि विन्यास में होनी चाहिए क्योंकि यह आपके कॉन्फिग को "बहुत जटिल" बना देगा जो कि खराब डिजाइन है। वास्तव में, "चीजों को सरल रखने" की कोशिश कर रहा है यही कारण है कि कॉन्फिग फाइल एक विशाल गड़बड़ है। कभी-कभी सबसे सरल चाल को संशोधित करना है। यही कारण है कि आपकी कॉन्फ़िगरेशन फ़ाइलों को एक प्रसिद्ध सामान्य प्रयोजन प्रोग्रामिंग लैंग्वेज में लिखा जाना चाहिए - कुछ भयानक कॉन्फ़िगरेशन भाषा नहीं (पढ़ें: सभी "कॉन्फ़िगरेशन भाषाएं" चूसना )।

  3. फिर, कौन होना चाहिए विन्यास फाइल को संशोधित करना पूरी तरह से आवेदन पर निर्भर है। लेकिन मैं मिनिकार्क से सहमत हूं, जो कोई भी एप्लिकेशन को तैनात कर रहा है वह कॉन्फ़िगरेशन का प्रभारी होना चाहिए।

  4. स्रोत सब कुछ आप कर सकते हैं नियंत्रण। स्रोत नियंत्रण महान है। आप सामान को आसानी से वापस रोल कर सकते हैं और आपके द्वारा किए गए परिवर्तनों का एक पूरा इतिहास है और उन परिवर्तनों को किसने रिकॉर्ड किया है। तो क्यों नहीं?

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