Яка хороша конструкція для забезпечення зворотної сумісності типу файлів між різними версіями програмного забезпечення?
Наприклад, як 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
.....
}
але це здається неймовірно монолітним, не дуже розширюваним і, ймовірно, призведе до безлічі копій / вставлених кодів.
Тому я думав про використання базового інтерфейсу для всіх версій, який визначає незмінні структури, такі як заголовок, які повинні бути присутніми у файлі, та методи, які повинні бути доступними для серіалізації / десеріалізації, а потім множинного успадкування, щоб кожна Клас нової версії, який реалізує інтерфейс, успадковує стару версію і лише переосмислює зміни, які були змінені, оскільки файл здебільшого буде однаковим.
Я не дуже переймаюся структурою файлу, оскільки вже вирішено, що ми будемо використовувати XML, і початкова схема, за великим рахунком, вже вирішена. Однак в майбутньому, без сумніву, не буде змін, і я просто хочу мати можливість спроектувати код таким чином, щоб легко змінити ці зміни.