Domanda

Best Practices: contratto dati delle versioni , e essi affermano:

  

Non rimuovere membri di dati nelle versioni successive, anche se il IsRequired struttura è stata lasciata al suo proprietà predefinita di false nelle versioni precedenti.

Qualcuno può suggerire alcuna ragione per questo? Essi non elaborano. Dal momento che dicono che va bene per aggiungere membri di dati in una versione successiva, sembra che la rimozione sarebbe bene troppo -. In modo efficace, la versione precedente vedrebbe come un add

La differenza, suppongo, è che si suppone di aggiungere nuovi membri al termine (utilizzando la proprietà dell'Ordine sul DataMemberAttribute), mentre la proprietà ottenendo rimosso probabilmente non sarebbe alla fine. Ma dicono anche che i membri mancanti saranno lasciati al loro valore di default in fase di carico, quindi è chiaro che i membri mancanti sono OK.

Che cosa mi manca? Quali problemi versione interoperabilità dovrei causare (sia in avanti-compatibilità e indietro-compatibilità) se obsoleto una caratteristica del mio prodotto e rimosso la proprietà [DataMember] che va con esso?

Inoltre, se ho deciso che non mi interessava in avanti-compatibilità (vale a dire, se non ero preoccupato per le versioni più vecchie di apertura file più recenti), si applicano ancora tali problemi?

È stato utile?

Soluzione

Semplicemente perché i consumatori di servizi esterni possono fornire / utilizzare tali dati (sono stati creati prima di avere rimosso alcuni membri). Nel caso in cui hai cambiato servizio di firma del metodo, DataContractSerializer non sarà in grado di riconoscere DataContract più, a causa di membri di dati sconosciuti.

Quindi, se i vostri consumatori di servizi sono tutti noti, si può facilmente manipolare i membri di dati a proprio sarà il tempo che:

  • non rompere i consumatori o
  • correttamente informarli del cambiamento

Altri suggerimenti

Un problema è che, anche se non si rompe durante la serializzazione / deserializzazione, si potrebbe essere buttare via i dati - il che significa che non si può con successo i dati di andata e ritorno al chiamante. cioè dato il metodo semplice:

public SomeType Echo(SomeType obj) {
    return obj;
}

Se il chiamante si sta passando il vecchio oggetto con la proprietà in più, si potrebbe desiderare quel valore indietro. È possibile attivare questa (a parte) con la dati API, ma francamente le persone raramente preoccuparsi di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top