Jaki jest dobry projekt umożliwiający wsteczną zgodność typu pliku między różnymi wersjami oprogramowania?
Na przykład, w jaki sposób Microsoft uzyskuje słowo 2007, 2010 i 2013 itd. ... do wszystkich otwartych plików docx, ale różne wersje mogą zapisywać więcej / mniej danych i zapisywać dane w nieco inny sposób, wszystkie w tym samym typie pliku i plik zapisany w jednej wersji można otworzyć w innej, ale niektóre elementy pliku mogą nie być dostępne w starszych wersjach?
To znaczy, naprawdę oczywistym sposobem na zrobienie tego jest posiadanie czegoś takiego
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
.....
}
ale wydaje się to niewiarygodnie monolityczne, niezbyt rozszerzalne i może prowadzić do dużej ilości kopiowanego / wklejanego kodu.
Zastanawiałem się więc nad użyciem podstawowego interfejsu dla wszystkich wersji, które definiują niezmienne struktury, takie jak nagłówek, które muszą być obecne w pliku, oraz metody, które muszą być dostępne do serializacji / deserializacji, a następnie wielokrotnego dziedziczenia, aby każda klasa nowej wersji, która implementuje interfejs, dziedziczy starą wersję i zastępuje tylko rzeczy, które uległy zmianie, ponieważ plik będzie w większości taki sam.
Tak naprawdę nie przejmuję się strukturą pliku, ponieważ już zdecydowano, że będziemy używać XML, a początkowy schemat jest, ogólnie rzecz biorąc, już ustalony. Jednak bez wątpienia w przyszłości będą do niego wprowadzane zmiany, a ja po prostu chcę móc zaprojektować kod w sposób ułatwiający dostosowanie się do tych zmian.