In base alla mia esperienza, provare a garantire che le nuove versioni di un'applicazione mantengano la compatibilità con l'archiviazione dei dati delle versioni precedenti può spesso essere un processo doloroso.
Quello che faccio attualmente è di salvare un numero di versione per ogni 'unità' di dati (che si tratti di un file, una riga / tabella del database o qualsiasi altra cosa) e assicurarsi che il numero di versione venga aggiornato ogni volta che i dati cambiano in qualche modo . Creo anche metodi per convertire da v1 a v2, v2 a v3 e così via. In questo modo, se sono in v7 e trovo un file v3, posso fare v3- > v4- > v5- > v6- > v7.
Finora questo approccio sembra funzionare bene, ma non ho dovuto utilizzarlo estensivamente, per cui potrebbero esserci problemi non risolti. Sono anche preoccupato che se gli oggetti che sto caricando cambino in modo significativo, dovrò mantenere le vecchie versioni delle classi o dover aggiornare tutti i miei metodi di conversione per gestire la nuova definizione di classe.
Il mio approccio è corretto? Ci sono altri / approcci migliori che potrei usare? Esistono modelli di progettazione applicabili a questo problema?