Apa desain yang baik untuk memungkinkan kompatibilitas mundur dari jenis file antara berbagai versi perangkat lunak?
Misalnya, bagaimana microsoft mendapatkan kata 2007, 2010 dan 2013 dll ... untuk semua file docx terbuka, tetapi edisi yang berbeda dapat menyimpan lebih banyak / lebih sedikit data dan menyimpan data dengan cara yang sedikit berbeda, semua untuk jenis file yang sama, dan file yang disimpan dalam satu versi dapat dibuka di yang lain, tetapi elemen-elemen tertentu dari file mungkin tidak tersedia di versi yang lebih lama?
Maksud saya, cara yang sangat jelas untuk melakukannya adalah memiliki sesuatu seperti
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
.....
}
tapi itu kelihatannya sangat monolitik, tidak terlalu bisa diperluas, dan cenderung mengarah ke banyak kode copy / paste.
Jadi saya berpikir untuk menggunakan antarmuka dasar untuk semua versi yang mendefinisikan struktur yang tidak dapat diubah, seperti header, yang perlu ada dalam file, dan metode yang perlu tersedia untuk serialisasi / deserialisasi, kemudian banyak pewarisan sehingga masing-masing kelas versi baru yang mengimplementasikan antarmuka mewarisi versi lama, dan hanya menimpa hal-hal yang telah berubah, karena file akan sama, sebagian besar.
Saya tidak terlalu peduli dengan struktur file, karena sudah diputuskan bahwa kita akan menggunakan XML, dan skema awalnya, pada umumnya, sudah diputuskan. Namun, tidak akan ada keraguan untuk mengubahnya di masa depan, dan saya hanya ingin dapat merancang kode dengan cara yang membuatnya mudah untuk mengakomodasi perubahan ini.