Một thiết kế tốt để cho phép khả năng tương thích ngược của một loại tệp giữa các phiên bản phần mềm khác nhau là gì?
Chẳng hạn, làm thế nào microsoft có được word 2007, 2010 và 2013, v.v ... cho tất cả các tệp docx đang mở, nhưng các phiên bản khác nhau có thể lưu nhiều hơn / ít dữ liệu hơn và lưu dữ liệu theo các cách hơi khác nhau, tất cả vào cùng một loại tệp và a tập tin được lưu trong một phiên bản có thể được mở trong một phiên bản khác, nhưng một số yếu tố nhất định của tập tin có thể không có sẵn trong các phiên bản cũ hơn?
Ý tôi là, cách thực sự rõ ràng để làm điều đó là có một cái gì đó như
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
.....
}
nhưng điều đó dường như vô cùng nguyên khối, không thể mở rộng và có khả năng dẫn đến rất nhiều mã sao chép / dán.
Vì vậy, tôi đã nghĩ đến việc sử dụng giao diện cơ sở cho tất cả các phiên bản xác định cấu trúc bất biến, chẳng hạn như tiêu đề, cần phải có trong tệp và các phương thức cần có sẵn để tuần tự hóa / giải tuần tự hóa, sau đó nhiều kế thừa để mỗi kế thừa Lớp của phiên bản mới thực hiện giao diện kế thừa phiên bản cũ và chỉ ghi đè lên những thứ đã thay đổi, vì phần lớn tệp sẽ giống nhau.
Tôi không thực sự bận tâm về cấu trúc của tệp, vì nó đã quyết định rằng chúng tôi sẽ sử dụng XML và lược đồ ban đầu, nói chung, đã được quyết định. Tuy nhiên, không có nghi ngờ gì về những thay đổi trong tương lai và tôi chỉ muốn có thể thiết kế mã theo cách giúp dễ dàng điều chỉnh những thay đổi này.