सॉफ्टवेयर के विभिन्न संस्करणों के बीच फ़ाइल प्रकार के पीछे की संगतता की अनुमति देने के लिए एक अच्छा डिज़ाइन क्या है?
उदाहरण के लिए, Microsoft को 2007, 2010 और 2013 आदि शब्द कैसे मिलते हैं ... सभी docx फ़ाइलों को खोलने के लिए, लेकिन विभिन्न संस्करण अधिक / कम डेटा को सहेज सकते हैं और डेटा को थोड़े अलग तरीके से सहेज सकते हैं, सभी एक ही फ़ाइल प्रकार और एक एक संस्करण में सहेजी गई फ़ाइल को दूसरे में खोला जा सकता है, लेकिन पुराने संस्करणों में फ़ाइल के कुछ तत्व उपलब्ध नहीं हो सकते हैं?
मेरा मतलब है, ऐसा करने का वास्तव में स्पष्ट तरीका कुछ ऐसा है
private string openfile(string filename)
{
File.Open(filename)
... some logic that gets a header from the file that will never change
switch (fileversion)
case 2007:
.....
case 2010
.....
case 2013
.....
}
लेकिन ऐसा लगता है कि अविश्वसनीय रूप से अखंड है, बहुत एक्स्टेंसिबल नहीं है, और बहुत सारे कॉपी / पेस्ट कोड के लिए नेतृत्व करने की संभावना है।
इसलिए मैं सभी संस्करणों के लिए एक आधार इंटरफ़ेस का उपयोग करने के बारे में सोच रहा था जो अपरिवर्तनीय संरचनाओं को परिभाषित करता है, जैसे कि हेडर, जिसे फ़ाइल में मौजूद होने की आवश्यकता है, और विधियाँ जो क्रमबद्धता / deserialisation के लिए उपलब्ध होने की आवश्यकता है, फिर कई विरासत हैं ताकि प्रत्येक नए संस्करण की कक्षा जो इंटरफ़ेस को लागू करती है, पुराने संस्करण को विरासत में मिला है, और केवल उस सामान को ओवरराइड करता है जो बदल गया है, क्योंकि फ़ाइल अधिकांश भाग के लिए समान होगी।
मैं वास्तव में फ़ाइल की संरचना के बारे में परेशान नहीं हूं, क्योंकि यह पहले से ही तय कर चुका है कि हम XML का उपयोग कर रहे हैं, और प्रारंभिक स्कीमा, पहले से ही तय किया गया है। हालांकि भविष्य में इसमें कोई संदेह नहीं होगा, और मैं सिर्फ एक तरह से कोड को डिजाइन करने में सक्षम होना चाहता हूं जिससे इन परिवर्तनों को समायोजित करना आसान हो।