Salva i dati non così dinamici in un database e recupera le modifiche in futuro

1

Immagina questo caso d'uso:

Ho una classe con 50 attributi di cui 10 sono relazioni più 100 metodi che eseguono calcoli e restituiscono un valore.

Ho bisogno di salvare quei dati (comprese le relazioni e i valori di ritorno del metodo) in un database per un successivo recupero. L'idea è di avere un'istantanea dello stato corrente dell'istanza dell'oggetto .

Attualmente ho solo bisogno dei dati di 20 di tali attributi e 25 valori di ritorno del metodo, ma in futuro sarà necessario recuperarne altri. Probabilmente non userò mai alcuni dei dati salvati.

Potrei facilmente salvare e recuperare i dati da un JSON.

Ora immagina che dopo 3 mesi dopo aver generato e salvato 1.000.000 di istanze di questa classe, ho bisogno di iniziare a cambiare le cose alla fine, ad esempio:

  • Cambia il nome di 2 attributi e 3 metodi
  • Elimina una relazione
  • Dividi il valore di un attributo in 2 parti (ad esempio object.name in object.first_name object.last_name)
  • Aggiungi 5 nuovi metodi e attributi

Sebbene non sia necessario interrompere il recupero dei dati per i dati storici (vale a dire, aggiorna i registri o procedo di conseguenza sul recupero).

Avendo preso in considerazione quel caso d'uso:

Qual è l'approccio migliore per la conservazione, la manipolazione e il recupero dei dati? (parlando in termini di database, schemi di progettazione e altri mezzi tecnici)

    
posta Hacktivista 31.01.2018 - 15:59
fonte

2 risposte

1

Implementerei la serilizzazione degli oggetti e la deserilizzazione degli oggetti tramite textformat leggibile dall'uomo (xml / json / csv) per tutti i business class.

Esempio:

  • ogni classe ottiene un metodo toString () che crea una stringa dell'oggetto e i suoi sottooggetti
  • ogni classe ottiene un fromString (stringa) che ricrea l'oggetto con gli oggetti secondari di esso. Questo metodo deve comprendere il formato corrente e tutti i vecchi formati.

Questo approccio è indipendente dal database.

Datamanipulation avviene completamente nel objectmodell.

    
risposta data 31.01.2018 - 16:53
fonte
1

Ciò che stai chiedendo è refactoring del database , e se lo cerchi, troverai molto materiale perché questo è il motivo per cui altri hanno dovuto occuparsi per vari motivi.

Alcuni hanno la sfida che il loro software supporta più client ciascuno con la propria installazione (del database), il che significa che qualsiasi versione più recente deve essere in grado di aggiornare da qualsiasi versione esistente alla versione corrente. Inutile dire che automazione è una parola chiave importante da aggiungere qui.

Progetto di database evolutivo di Martin Fowler , ad esempio, illustra alcuni esempi che menzioni e discute l'importanza di versioning rispetto ai dati, che significa utilizzare il controllo di versione, i numeri di versione in modo da poter riconoscere i dati, ecc.

    
risposta data 31.01.2018 - 18:21
fonte