Was ist ein gutes Design, um die Abwärtskompatibilität eines Dateityps zwischen verschiedenen Softwareversionen zu ermöglichen?
Beispiel: Wie kann Microsoft Word 2007, 2010 und 2013 usw. in alle geöffneten DocX-Dateien übernehmen? Unterschiedliche Editionen können jedoch mehr oder weniger Daten speichern und die Daten auf leicht unterschiedliche Weise speichern, und zwar alle im selben Dateityp und a Datei, die in einer Version gespeichert ist, kann in einer anderen Version geöffnet werden, aber bestimmte Elemente der Datei sind in älteren Versionen möglicherweise nicht verfügbar?
Ich meine, der wirklich offensichtliche Weg ist, so etwas zu haben
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
.....
}
aber das scheint unglaublich monolithisch, nicht sehr erweiterbar und führt wahrscheinlich zu viel kopiertem / eingefügtem Code.
Daher habe ich mir überlegt, für alle Versionen eine Basisschnittstelle zu verwenden, die die unveränderlichen Strukturen definiert, z. B. den Header, die in der Datei vorhanden sein müssen, und Methoden, die für die Serialisierung / Deserialisierung verfügbar sein müssen, und dann jeweils eine Mehrfachvererbung Die Klasse der neuen Version, die die Schnittstelle implementiert, erbt die alte Version und überschreibt nur die Änderungen, da die Datei zum größten Teil identisch ist.
Die Struktur der Datei interessiert mich nicht wirklich, da bereits entschieden wurde, XML zu verwenden, und das anfängliche Schema im Großen und Ganzen bereits festgelegt ist. Es wird jedoch zweifellos in Zukunft Änderungen geben, und ich möchte den Code nur so gestalten können, dass diese Änderungen problemlos berücksichtigt werden können.