Abbiamo un requisito per una nuova funzionalità che richiede che alcuni dati seme siano presenti nel database (in pratica alcuni valori predefiniti) affinché la funzione funzioni correttamente. Abbiamo questo in 2 diversi scenari al momento, e il miglior metodo di generazione / inserimento dei dati seme sembra variare a seconda dell'archivio dati che usiamo. Non sto parlando di seminare dati per scopi di test qui.
Ad esempio, alcune funzionalità richiedono che le tabelle siano presenti in SQL Server. Stiamo usando le migrazioni manuali tra le versioni (fondamentalmente diffondendo gli schemi), quindi inserire i dati seme per questo avrebbe senso essere fatto nello stesso script SQL che aggiorna lo schema. Il modo in cui alcuni ORM sembrano gestire questo è di avere un metodo Seed () (o equivalente) nel codice di inizializzazione che creerà i dati.
Una funzione diversa è l'utilizzo di Azure Table Storage (ATS) come archivio dati. Essendo senza schema, non c'è nessuno script per creare la tabella qui, ma l'applicazione controlla l'esistenza delle tabelle al primo avvio e le crea se non esiste lì. Ciò significa che normalmente non creiamo le tabelle prima che l'implementazione proceda. Per seminare dati in ATS potremmo pre-compilare l'ambiente (che richiederebbe che qualche codice sia scritto ed eseguito da qualche parte) o potremmo fare in modo che il componente che controlla l'esistenza della tabella inserisca i dati così come sono stati creati.
C'è uno svantaggio a lungo termine nell'avere i dati seme in classi nel codice, e se questo è il posto migliore per metterlo insieme, sarà più sensato tenere insieme i dati (ad es. avere una classe Seed con il dati in esso contenuti all'avvio dell'app) o il Repository ha la responsabilità di assicurarsi che i dati di base esista prima di inviare qualsiasi domanda?