การออกแบบที่ดีสำหรับการอนุญาตให้ใช้งานร่วมกันได้ของชนิดไฟล์ระหว่างซอฟต์แวร์รุ่นต่าง ๆ คืออะไร
ตัวอย่างเช่น Microsoft จะรับ Word 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
.....
}
แต่ดูเหมือนว่าเสาหินอย่างไม่น่าเชื่อไม่สามารถขยายได้มากและมีแนวโน้มที่จะนำไปสู่การคัดลอก / วางรหัสจำนวนมาก
ดังนั้นฉันจึงคิดว่าจะใช้อินเตอร์เฟสพื้นฐานสำหรับทุกเวอร์ชันที่กำหนดโครงสร้างที่ไม่เปลี่ยนรูปแบบเช่นส่วนหัวที่จำเป็นต้องมีอยู่ในไฟล์และวิธีการที่จำเป็นต้องมีสำหรับ serialization / deserialisation คลาสของเวอร์ชันใหม่ที่ใช้อินเทอร์เฟซสืบทอดเวอร์ชันเก่าและแทนที่เฉพาะสิ่งที่มีการเปลี่ยนแปลงเนื่องจากไฟล์จะเหมือนกันส่วนใหญ่
ฉันไม่ได้ใส่ใจกับโครงสร้างของไฟล์มากนักเนื่องจากมันได้ตัดสินใจแล้วว่าเราจะใช้ XML และสคีมาเริ่มต้นนั้นใหญ่และใหญ่แล้ว อย่างไรก็ตามไม่ต้องสงสัยเลยว่าจะมีการเปลี่ยนแปลงในอนาคตและฉันแค่ต้องการที่จะสามารถออกแบบรหัสในแบบที่ทำให้ง่ายต่อการรองรับการเปลี่ยนแปลงเหล่านี้