Frage

Typisches Szenario. Wir verwenden Altschule XML Web Services internally , um zwischen einer Serverfarm in Verbindung steht und mehrere verteilte und lokale Clients. Kein Dritter, nur unsere Anwendungen, die von ihnen und unseren Kunden.

Wir sind zur Zeit grübeln von XML WS zu einem WCF/object-based Modell bewegen und haben mit verschiedenen Ansätzen experimentiert. Einer von ihnen beinhaltet die Domain-Objekte / Aggregate direkt über den Draht übertragen, möglicherweise Berufung auf ihnen Attribute Datacontract.

Durch die Verwendung von IExtensibleDataObject und DataContract die Order-Eigenschaft auf dem DataMembers verwenden, sollten wir in der Lage sein, mit einfachen Eigenschaft Versionierung Probleme zu bewältigen (denken Sie daran, steuern wir alle Kunden und können sie leicht zwangs aktualisieren).

Ich höre immer wieder, dass wir gewidmet verwenden sollten, Transfer-only Data Transfer Objects (DTOs) über den Draht.

Warum? Gibt es noch einen Grund, dies zu tun? Wir verwenden das gleiche Domain-Modell auf der Server-Seite und Client-Seite, natürlich, Sammlungen Vorfüllen etc. nur dann, wenn Recht und als „notwendig“. Sammlung Eigenschaften nutzen den Service Locator Prinzip und IoC entweder eine NHibernate-based „Service“ aufrufen Daten direkt zu holen (auf der Server-Seite) und einen WCF „Dienst“ Client auf der Client-Seite zum WCF Serverfarm zu sprechen.

Also - warum brauchen wir DTOs verwenden

?
War es hilfreich?

Lösung

Nach meiner Erfahrung DTOs sind am nützlichsten für:

  1. Strictly definieren, was über den Draht und eine Art speziell auf diese Definition gewidmet hat gesendet wird.
  2. Die Isolierung der Rest der Anwendung, Client und Server, von zukünftigen Änderungen.
  3. Die Interoperabilität mit non-.Net Systemen. DTOs ist sicherlich keine Voraussetzung, aber sie machen es einfacher, „sicher“ Typen zu entwerfen.

In Ihrem Szenario diese Design-Merkmale Rolle kann nicht so viel. Ich habe WCF sowohl mit strengem DTOs genutzt und Domain-Objekten und in beiden Szenarien es funktionierte großartig. Das einzige, was ich auffiel, beim Senden von Domänenobjekten über den Draht war, dass ich eher mehr Daten senden (und auf unerwartete Weise), dann auf die ich brauchte. Dies war wahrscheinlich aufgrund meiner mangelnden Erfahrung mit WCF als alles andere; aber es ist etwas, das Sie auf jeden Fall vorsichtig sein sollten sollten Sie wählen, diesen Weg zu gehen.

Andere Tipps

mit beiden Ansätzen (Shared Domain-Objekte und DTOs) gearbeitet hat ich das große Problem mit gemeinsam genutzten Domain-Objekten würde sagen, wenn Sie nicht alle Kunden steuern, aber aus meinen bisherigen Erfahrungen würde ich in der Regel verwenden DTOs es sei denn, es Entwicklung Geschwindigkeit war von fundamentaler Bedeutung.

Wenn es irgendeine Chance, dass Sie nicht immer die Kontrolle über den Kunden sein wird, dann würde ich auf jeden Fall DTOs empfehlen, denn sobald Sie mit jemand anderem Client-Anwendung Ihre Domain-Objekte teilen Sie beginnen Ihre Interna von jemand anderem Entwickler binden Zyklus.

Ich habe auch DTOs nützlich gefunden, wenn in einem versioniert-Service-Umgebung arbeiten, die uns radikal die Interna unserer App ändern dürfen, aber immer noch Anrufe an die alten Versionen unserer Service-Schnittstellen akzeptieren.

Schließlich, wenn Sie eine Menge von Client-Anwendungen haben könnte es auch von Vorteil sein, DTOs zu verwenden, wie Sie dann mit einem leicht versionierbar Service geschützt sind.

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