In molti approcci allo sviluppo del software come metodologie agili, progettazione guidata dal dominio e analisi e progettazione orientate agli oggetti, siamo incoraggiati ad adottare un approccio iterativo allo sviluppo.
Quindi non dovremmo fare il nostro modello di dominio nel modo giusto la prima volta che iniziamo a lavorare nel progetto. Invece, col passare del tempo, rielaboriamo il modello perché acquisiamo una comprensione più profonda del dominio del problema con il tempo.
A parte questo, anche se proviamo a ottenere un modello perfetto in anticipo, che sono già convinto sia molto difficile, i requisiti possono cambiare. Quindi, dopo che il software è stato distribuito alla produzione, gli utenti finali potrebbero notare che un determinato requisito non è stato completamente compreso, o peggio, un requisito mancava.
Il punto qui è che potremmo finire per dover cambiare il modello dopo che il software è stato distribuito. Se ciò accade, abbiamo un problema: il database di produzione ha i dati dell'utente che sono importanti ed è già inserito nel formato per il vecchio modello .
L'aggiornamento del codice potrebbe essere un compito difficile se il codice non è ben progettato e se il sistema è grande. Ma può essere fatto con il tempo, abbiamo strumenti come Git che ci aiutano a farlo senza danneggiare la versione pronta per la produzione.
D'altra parte, se il modello cambia, se le proprietà delle classi scompaiono o altro, anche il database dovrebbe cambiare. Ma abbiamo un problema: ci sono già dei dati che non possono essere persi, che è già formulato per il vecchio modello.
Sembra che un database relazionale qui sia una barriera che ci impedisce di fare sviluppo iterativo e persino di aggiornare il software quando richiesto dagli utenti finali.
Un approccio che ho già usato è stato quello di codificare una classe speciale che associa vecchie tabelle di database a nuove. Pertanto, queste classi raccolgono i dati nel vecchio formato, li convertono nel formato utilizzato dal nuovo modello e li salvano nelle nuove tabelle.
Questo approccio sembra non essere il migliore. La mia domanda qui è: esistono approcci noti e raccomandati per conciliare lo sviluppo iterativo con i database relazionali?