2010-02-23 18 views
5

के मामले में लोड/बचाने के कार्यों के आयोजन का सबसे अच्छा तरीका है मेरे पास है एक वर्ग है जो एक डेटाबेस पर एक ऐतिहासिक निष्कर्षण परिभाषित करता है:स्थिर/गैर स्थिर

class ExtractionConfiguration 
{ 
    string ExtractionName; 
    time ExtractionStartTime; 
    time ExtractionEndTime; 

    // Should these functions be static/non-static? 
    // The load/save path is a function of ExtractionName 
    void SaveConfigruation(); 
    void LoadConfiguration(); 
} 

ये ExtractionConfigurations जरूरत है/पर सहेजने के लिए डिस्क से भरी हुई । स्थैतिक/गैर स्थैतिक के संदर्भ में सहेज/लोड फ़ंक्शंस को व्यवस्थित करने का सबसे अच्छा तरीका क्या है? मेरे लिए, यह स्पष्ट है कि SaveConfiguration() एक सदस्य फ़ंक्शन होना चाहिए। हालांकि LoadConfiguration() के साथ, इसे और अधिक समझ बनाने करता

ExtractionConfiguration newExtraction; 
newExtraction.LoadConfiguration(); 

फोन और एक अस्थायी खाली उदाहरण है या लोड समारोह स्थिर बनाने के लिए

static ExtractionConfiguration LoadConfiguration(string filename); 

और सिर्फ फोन

ExtractionConfiguration newExtraction = ExtractionConfiguration::LoadConfiguration(filename); 

जो मुझे नीरस लगता है, लेकिन लोड/बचत तंत्र की 'समरूपता' तोड़ता है (क्या यह भी एक सार्थक/सार्थक विचार है?)।

मुझे लगता है कि 'सर्वश्रेष्ठ' उत्तर मांगना कुछ हद तक बेवकूफ है। मैं वास्तव में यहां शामिल मुद्दों की बेहतर समझ पाने की कोशिश कर रहा हूं।

पीएस यह SO पर मेरा पहला प्रश्न है, इसलिए यदि मैंने इसे सही तरीके से प्रस्तुत नहीं किया है, तो कृपया मुझे बताएं और मैं समस्या को स्पष्ट करने और बनाने की कोशिश करूंगा।

+0

आपका स्वागत है। कोड के रूप में प्रारूपित करने के लिए, आप कोड के अनुभाग को 4 रिक्त स्थान या 1 टैब से इंडेंट करते हैं। Http://stackoverflow.com/editing-help देखें। – kennytm

+0

धन्यवाद केनी, मैं * निश्चित था * मैं वहां प्रारूपण के साथ एक चाल लापता था! –

+3

आपको छोटे नामों का उपयोग करना चाहिए। जैसे बस सहेजें और लोड करें, क्योंकि वे पहले से ही कक्षा के अंदर हैं। हर कोई Intellisense का उपयोग नहीं करता :) – Tronic

उत्तर

1

आपको Boost.Serialization style क्रमबद्धता फ़ंक्शन का उपयोग करने पर विचार करना चाहिए जो सहेजने और लोड करने के लिए अलग-अलग फ़ंक्शंस से बचने से बचाता है (भले ही आप लाइब्रेरी का उपयोग न करें)।

इस दृष्टिकोण में आप किसी भी प्रकार की ऑब्जेक्ट को पास कर सकते हैं जिसमें ऑपरेटर & है, सभी सदस्य चर पर एक ऑपरेशन करने के लिए। ऐसी एक वस्तु डेटा को फ़ाइल में सहेज सकती है, दूसरा फ़ाइल से लोड हो सकता है, तीसरा कंसोल पर डेटा प्रिंट कर सकता है (डीबगिंग के लिए आदि)।

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

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

+0

serialization पर अच्छी कॉल। यदि आप किसी कारण से बूस्ट पसंद नहीं करते हैं तो अपने स्वयं के धारावाहिक कार्यों को रोल करना मुश्किल नहीं है। @ रोडियन, एक कन्स्ट्रक्टर बनाने या फ़ंक्शन प्रारंभ करने पर विचार करें जो फ़ाइल नाम को तर्क के रूप में लेता है यदि आप अतिरिक्त प्रतियों से बचना चाहते हैं। आप अपना भार या एक सहायक के रूप में कार्य को deserialize रख सकते हैं। – thebretness

+0

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