Frage

Ich las Microsofts Best Practices: Daten Vertrag Versioning und stellen sie fest:

  

Entfernen Sie nicht Datenelemente in späteren Versionen, auch wenn die IsRequired Eigenschaft wurde bei seiner Standardeigenschaft links von false in früheren Versionen.

Kann jemand einen Grund dafür vorschlagen? Sie erarbeiten nicht. Da sie sagen, es ist in Ordnung, Datenelemente in einer späteren Version hinzuzufügen, scheint es, dass auch wäre schön, zu entfernen -. Effektiv, die ältere Version es als Add sehen würde

Der Unterschied, nehme ich an, dass Sie sollen neue Mitglieder am Ende hinzufügen (mit der Order-Eigenschaft auf dem Datamember), während die Eigenschaft wahrscheinlich nicht am Ende sein würde, entfernt zu werden. Aber sie sagen auch, dass fehlende Mitglieder auf ihrem Standardwert beim Laden verlassen werden, so ist es klar, dass fehlende Mitglieder in Ordnung sind.

Was bin ich? Welche Version-Interop-Probleme würde ich verursachen (sowohl vorwärts-Kompatibilität und Abwärtskompatibilität), wenn ich ein Merkmal meiner Produkt veraltet und entfernt die [Datamember] Eigenschaft, die mit ihm geht?

Auch wenn ich entscheiden, dass ich nicht daran interessiert, in der Vorwärtskompatibilität war (das heißt, wenn ich nicht besorgt über ältere Versionen neuere Dateien zu öffnen), würden solche Probleme noch anwenden?

War es hilfreich?

Lösung

Ganz einfach, weil außerhalb Service Verbraucher bereitstellen kann / diese Daten verwenden, (sie erstellt wurden, bevor Sie einige Mitglieder entfernt). Falls Sie Service-Methode Signatur geändert haben, DataContractSerializer wird mehr nicht in der Lage sein DataContract zu erkennen, weil unbekannten Datenelemente.

Also, wenn Ihr Service Verbraucher alle bekannt sind, können Sie einfach Datenelemente auf eigene manipulieren, solange Sie:

  • nicht brechen Verbraucher oder
  • richtig informieren sie über die Änderung

Andere Tipps

Ein Problem ist, dass selbst, wenn sie nicht bei der Serialisierung / Deserialisierung nicht bricht, Sie Daten Wegwerfen werden könnte - was bedeutet, dass man nicht erfolgreich Round-Trip-Daten zurück an den Anrufer. das heißt die einfache Methode gegeben:

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

Wenn der Anrufer Sie das alte Objekt mit der zusätzlichen Eigenschaft ist vorbei, könnten sie diesen Wert wollen zurück. Sie können dies (separat) mit dem Erweiterung rel="nofollow Daten API, aber ehrlich gesagt die Menschen nur selten mit dieser stören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top