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