2012-06-25 22 views
7

मेरे पास काफी बड़ा सी ++ एप्लिकेशन है (विंडोज़ पर, कोई अन्य प्लेटफार्म योजनाबद्ध नहीं है), जो वर्तमान में विंडोज रजिस्ट्री में सभी सेटिंग्स (यहां तक ​​कि कुछ प्रकार के पते) स्टोर करता है।सेटिंग्स संग्रहीत करने के लिए सर्वोत्तम अभ्यास

कभी-कभी यह असुविधाजनक होता है, क्योंकि उपयोगकर्ताओं को रजिस्ट्री में प्रविष्टियों को बदलने में कठिनाइयां होती हैं। मैं सेटिंग संस्करण स्थापित करना चाहता हूं, इसलिए सेटिंग्स हमेशा मौजूदा कोड से मेल खाते हैं। फिलहाल हम संस्करण reg-files, लेकिन आप कभी भी सुनिश्चित नहीं हैं, अगर लक्ष्य मशीनों पर सभी reg-files को जोड़ा गया है। सी # के साथ आप app.config में डिफ़ॉल्ट मान परिभाषित कर सकते हैं, लेकिन मौजूदा सेटिंग्स को ओवरराइट नहीं करते हैं। मुझे नहीं पता, अगर सी ++ के लिए ऐसी कोई तंत्र या पुस्तकालय मौजूद है।

मैं निम्नलिखित "सुविधाओं" करना चाहते हैं:

  • सेटिंग्स (उपयोगकर्ता द्वारा किया जा सकता) लक्ष्य मशीनों पर संस्करणीकृत जा सकती है
  • सरल अद्यतन
  • सुनिश्चित करें कि अद्यतन पर केवल नई सेटिंग जोड़ रहे हैं और कोई मौजूदा सेटिंग को डिफ़ॉल्ट मानों के साथ ओवरराइट कर रहे हैं
  • उपयोगकर्ता के लिए सेटिंग की
  • सरल परिवर्तन
  • विन XP और विन के तहत
  • एक ही कार्यप्रवाह 7

जहाँ तक मुझे यह देखने के रूप में, वहाँ विंडोज पर सेटिंग्स को संग्रहीत करने के लिए 3 संभावनाएं हैं:

  • रजिस्ट्री
  • INI फ़ाइल
  • एक्सएमएल फ़ाइल के

केवल एक आवेदन हमारे सूट इस समय क्यूटी का उपयोग करता है, लेकिन बूस्ट उपलब्ध होगा।

पते के लिए, हम उन्हें किसी प्रकार की एक्सएमएल एड्रेस बुक में डाल देंगे, लेकिन अन्य सेटिंग्स के लिए हमें यकीन नहीं है कि सबसे अच्छा अभ्यास क्या है।

+2

पूछो मैं अन्य विकल्पों का सुझाव देते हैं: मानव के लिए YAML/JSON -डेबल प्रारूप, सरल एम्बेडेड के लिए SQLite। 'Ini' फ़ाइलों के संबंध में, आपको रुचि हो सकती है [बूस्ट के साथ आईएनआई फ़ाइल को कैसे पार्स करें] (http://stackoverflow.com/questions/6175502/how-to-parse-ini-file-with-boost)। Boost/ini फ़ाइलों के लिए –

+0

+1, यदि आप एसआई को कर सकते हैं। – DevSolar

+0

यदि आपको समावेशन की कई परतों की आवश्यकता है, तो मैं एक्सएमएल/जेएसओएन फाइलों के लिए जाऊंगा। अन्यथा, आईएनआई सबसे सरल समाधान हो सकता है। JSON या .ini के लिए – Morwenn

उत्तर

3

टिप्पणियों के अनुसार, पेड़-आधारित कुंजी/मूल्य संरचनाएं एक आम समाधान हैं और पुस्तकालयों को ढूंढना आसान है।

  • सेटिंग संस्करणीकृत जा सकती है
: के रूप में यह अच्छी तरह से परीक्षण किया है और आसानी से XML या JSON

अपनी आवश्यकताओं के बारे में के रूप में निर्यात किया जा सकता

Boost's property_tree, एक उत्कृष्ट पसंद है

हाँ! "संस्करण" को शीर्ष-स्तरीय कुंजी बनाएं। इसे अन्य संस्करणों के साथ आसानी से तुलनीय बनाओ।

आप अपनी सेटिंग्स को विभिन्न पेड़ नोड्स में भी वर्गीकृत कर सकते हैं और प्रत्येक नोड को एक संस्करण दे सकते हैं।

  • लक्ष्य मशीनों पर सरल अद्यतन (उपयोगकर्ता द्वारा किया जा सकता)

आपके आवेदन की क्या ज़रूरत है जब इसे चलाता है। निचे देखो।

  • कि अद्यतन केवल नए सेटिंग्स जोड़ रहे हैं पर सुनिश्चित करें और कोई मौजूदा सेटिंग को डिफ़ॉल्ट मानों के साथ ओवरराइट कर रहे हैं
  • उपयोगकर्ता के लिए सेटिंग की
  • सरल परिवर्तन
  • विन XP और 7 विन के तहत
  • एक ही कार्यप्रवाह

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

  • लोड मौजूदा विन्यास फाइल, अपने संस्करण की परवाह किए बिना: जब आपके आवेदन initializes "32 फारेनहाइट" "0 सेल्सियस"

    हो जाता है।

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

आपका "लापता सेटिंग" कार्यों कर सकते हैं:

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

 संबंधित मुद्दे