संस्करण समस्या को संभालने के बहुत सारे तरीके हैं; आप प्रति संस्करण एक लोड फ़ंक्शन करके इसे कर सकते हैं, आप समय के साथ परिसंपत्ति संरचना के परिवर्तन का वर्णन करके (विशेषताओं के माध्यम से) प्रक्रिया को स्वचालित करने का प्रयास कर सकते हैं, आप लोड / सेव फ़ंक्शंस, एट वगैरह के अंदर संस्करण-विशिष्ट जांच कर सकते हैं। ।
मुझे "परिवर्तनों का वर्णन" दृष्टिकोण पसंद है, लेकिन यह पता लगाएं कि विशेषताओं के माध्यम से इसे करने की कोशिश करना बहुत जल्दी हो जाता है । मैं इसके बजाय कार्यों का उपयोग करूँगा; एक फ़ंक्शन लागू करें जो आपके सभी उपयुक्त संस्करण के लिए N
संस्करण में डेटा को संस्करण में परिवर्तित करता है N + 1
। लोड होने पर, नवीनतम के खिलाफ संस्करण की जांच करें और यदि ऐसा नहीं है, तो सभी उपयुक्त संस्करण कार्यों के माध्यम से डेटा चलाएं। हमेशा नवीनतम संस्करण को बचाएं।
यदि आप परिवर्तन तब करते हैं जब डेटा एक रनटाइम की-वैल्यू फॉर्म में होता है तो यह सबसे अच्छा काम करता है। इसका मतलब है कि आप संभवतः अपने डेटा के लिए एक प्रतिनिधित्व लागू करना चाहते हैं जो "गुणों का रनटाइम बैग" दृष्टिकोण है, क्योंकि आप JSON या XML के अंतर्निहित कुंजी-मूल्य फ़ॉर्म का उपयोग नहीं कर सकते हैं यदि आपको अपना बाइनरी प्रारूप मिल गया है। यदि आप ऐसा नहीं करते हैं, तो आपको पुरानी कक्षा की परिभाषाएँ भी रखनी पड़ सकती हैं, जो बदसूरत हो जाती हैं। इस संपत्ति में आपकी संपत्ति होने में सक्षम होना खराब प्रारूप खेल संपादक विकास के लिए भी काफी उपयोगी है।
विकास के दौरान जब आप अपने डेटा पर पुनरावृत्ति करते हैं तो यह स्वाभाविक रूप से नवीनतम संस्करण तक फैल जाएगा और आप अंततः पुराने संस्करण के कार्यों को हटा सकते हैं। यह कमोबेश एक ही उच्च-स्तरीय दृष्टिकोण है जिसका उपयोग हम गिल्ड वॉर्स 2 में कला संपत्ति (जैसे कि नक्शे) के रूप में करने के लिए करते थे।
अब, सभी ने कहा, मुझे लगता है कि यह संपत्ति के लिए पाठ और द्विआधारी क्रमांकन दोनों का समर्थन करने के लिए उपयोगी है। विकास के दौरान, अपने सभी डेटा को XML या JSON के आधार पर मानव-पठनीय प्रारूप में रखें। यह आपकी पुनरावृत्ति क्षमता को बहुत बढ़ा सकता है क्योंकि आपको डेटा को संपादित करने के आसपास ऐसे जटिल उपकरण बनाने की आवश्यकता नहीं है। आप हाथ से सरल त्वरित मोड़ बनाने में सक्षम होने के लिए वापस आ सकते हैं।
दूसरा, यह मानते हुए कि आप अभी भी गेम को शिपिंग के लिए एक द्विआधारी प्रारूप चाहते हैं (जो फ़ाइल आकार या फ़ाइल IO समय में सुधार कर सकता है, इसलिए यह एक वैध इच्छा है), संस्करणांकन को संभालने के लिए अपने क्रमांकन और डीरियलाइज़ेशन एपीआई को डिज़ाइन करें। संस्करण है क्योंकि कुछ बिंदु के रूप में आप जहाज अद्यतन या बग फिक्स करने के लिए चाहते हो सकता है, एक शिपिंग संदर्भ में उपयोगी अभी भी। .NET सीरीज़ेशन और बूस्ट के सीरीज़ेशन की संस्करण क्षमताओं का वर्णन करने वाले कुछ दस्तावेज़ हैं जो आपको दिलचस्प लग सकते हैं। यदि आप पाठ और बाइनरी दोनों स्वरूपों का समर्थन करने जा रहे हैं , तो सुनिश्चित करें कि आप उन्हें कभी-कभार परीक्षण करें (या ऐसा करने के लिए स्वचालित परीक्षण बनाएं, और भी बेहतर)।