2012-03-06 7 views
8

Ho lavorato un po 'con mongoDB in C# ma tutto il mio codice è ancora in sviluppo. Mi chiedo quali modelli utili le persone hanno trovato nell'evoluzione delle loro classi di dominio nel tempo man mano che vengono create, modificate e rimosse nuove proprietà. Sono certo che avrò bisogno di eseguire aggiornamenti su tutti i miei dati memorizzati o assicurarmi che le mie classi di dominio sappiano come gestire i vecchi record di formato, ma con il tempo potrei immaginare che questo diventa caotico se una classe ha saputo come comportarsi tutti i possibili formati di form.Esistono schemi generali per la progettazione di classi per i database di schemi in .NET?

Sto pensando troppo a questo? Questo è principalmente il caso di usare una buona programmazione difensiva?

+0

Argomento relativamente nuovo, buona domanda .. ma probabilmente appartiene a programmers.stackexchange.com perché è di natura più concettuale rispetto a un normale "problema" da risolvere. – NotMe

risposta

2
  1. L'aggiunta di nuove proprietà agli oggetti dati non può essere più semplice. Ti basta aggiungere . A meno che non ti preoccupi che queste proprietà siano nulle per l'oggetto che esiste nel database, non devi fare nulla altro. Se alcuni utenti/macchine utilizzano la versione precedente dell'applicazione e le classi sono state contrassegnate con BsonIgnoreExtraElementsAttribute, potrebbe non essere nemmeno necessario aggiornare il proprio software .
  2. La rimozione di proprietà obsolete non può essere più semplice. Si semplicemente rimuoverli nelle classi. Se le classi sono contrassegnate con BsonIgnoreExtraElementsAttribute, non è nemmeno necessario rimuovere nel database (nel caso, ad esempio, gli utenti dispongano di diverse versioni della tua app).
  3. Anche la ridenominazione delle proprietà della classe è facile. Il costruttore BsonElementAttribute ha un parametro, quindi è possibile associarlo al nome della proprietà corretta nel database.
  4. La modifica del tipo di proprietà potrebbe richiedere l'esecuzione di un aggiornamento sui dati . Ma seriamente, quanto spesso cambi tipo di proprietà dalla stringa a int in produzione?

Quindi in molti casi non è nemmeno necessario eseguire aggiornamenti sui dati (a meno che non si modifichi il tipo di dati o la proprietà influenzi l'indice). Un altro punto è che l'aggiunta di BsonIgnoreExtraElementsAttribute è spesso una buona pratica, in particolare se si è preoccupati che le proprietà vengano aggiunte e/o rimosse frequentemente. Seguendo questa pratica, è possibile fornire versioni più vecchie e più recenti della propria applicazione per lavorare con tutte le versioni dei record, godendo dei benefici di "schemalessness".

+0

Stavo pensando sulla stessa linea, ma ero preoccupato che non potesse essere così facile. Sono felice di sentire che sembra essere. –

Problemi correlati