Lavoro in un progetto SaaS in cui ogni utente può avere una rappresentazione di alcuni dati comuni in un dato momento. Per fare un esempio, consideriamo che i dati di ciascun utente sono metadati su di essi mantenuti separatamente su disco come file JSON:
{
"name" : "Bob"
}
Con l'arrivo di nuovi requisiti, questa rappresentazione sottostante potrebbe cambiare (ad esempio, nel JSON precedente, supponiamo che l'attributo name sia cambiato in firstName
e che venga aggiunto un altro attributo lastName
). Per supportare gli artefatti creati in momenti diversi, siamo costretti a gestirli in due modi:
- Migrazione di tutti i dati dalla vecchia rappresentazione a nuova
- Segui percorsi di codice / logica condizionale diversi a seconda della rappresentazione sottostante:
.
if (oldRepresentation) {
... do this ...
} else if (middleRepresentation) {
... do that ...
} else {
... do something else ...
}
Entrambi sembrano problematici in quanto è un approccio big bang (e sappiamo tutti che le migrazioni sono raramente lisce) e l'altro crea una certa dose di dissonanza nella sorgente con tutta la logica condizionale. Sono curioso di sapere come altri progetti gestiscono le migrazioni di questo tipo? La maggior parte di voi usa uno degli approcci precedenti? In che modo la tua architettura tiene conto di questo? Disponi di un servizio separato per eseguire le migrazioni su richiesta?