Frage

Ich bin gespannt, was die Gemeinschaft in diesem Thema fühlt. Ich bin kürzlich mit einem Nhibernate/WCF -Szenario in die Frage gestellt (Entitäten bestanden auf der Serviceschicht) und stellte fest, dass ich hier möglicherweise in die falsche Richtung gehe.

Meine Frage ist eindeutig, wenn Sie ein persistierendes Objektdiagramm (NhiberNate, Linq zu SQL usw.) hinter einem Webdienst (WCF in diesem Szenario) verwenden, schicken Sie diese Entitäten lieber über das Draht? Oder würden Sie eine Reihe von leichteren DTOs (ohne zyklischen Referenzen) durchführen?

War es hilfreich?

Lösung

Dtos. Verwenden Sie Automapper für Object-to-Object Mapping

Andere Tipps

Ich war schon mehrmals in diesem Szenario und kann auf beiden Seiten aus Erfahrung sprechen. Ursprünglich serialisierte ich nur meine Einheiten und sandte sie so wie es ist. Dies funktionierte von einem funktionalen Standpunkt aus gut, aber je mehr ich mich darum kümmerte, desto mehr wurde mir klar, dass ich mehr Daten sandte, als ich musste, und ich verlor die Fähigkeit, die Implementierung auf beiden Seiten zu variieren. In nachfolgenden Serviceanwendungen habe ich an erstellte DTOs übernommen, deren einziger Zweck es ist, Daten zum und vom Webdienst zu erhalten.

Außerhalb eines Interops ist es sehr hilfreich (für mich), über alle Felder nachzudenken, die über den Draht gesendet werden, um sicherzustellen .

Wie andere erwähnt haben, Automapper ist ein großartiges Werkzeug für die DTO -Mapping für Entität.

Ich habe fast immer DTOs erstellt, um über das Kabel zu übertragen und Richter entitäten auf meinem Server und Client zu verwenden. Auf dem Client haben sie eine gemeinsame Präsentationslogik auf dem Server, sie haben eine Geschäftslogik. Die Zuordnung zwischen DTOs und Entitäten kann dumm sein, muss jedoch passieren. Werkzeuge wie Automapper helfen Ihnen.

Wenn Sie fragen, sende ich serialisierte Unternehmen aus einem Webdienst nach außen? Dann lautet die Antwort definitiv nein, Sie werden minimale Interoperabilität erhalten, wenn Sie das tun. DTOs helfen bei der Lösung dieses Problems, indem Sie einen Satz von 'Objekten' definieren, die in jeder Sprache instanziiert werden können, unabhängig davon, ob Sie C#, Java, JavaScript oder irgendetwas anderes verwenden.

Ich hatte immer Probleme beim Senden von Nhibernate -Objekten über den Draht. Insbesondere wenn Sie ein ActivereCord -Modell verwenden. und/oder wenn Ihr Objekt Verbindungen zur Sitzung (Yuck) hat. Ein weiteres böses Ergebnis ist, dass Nhibernate das Objekt beim Eintritt der Methode (bevor Sie es erreichen können) versuchen kann, das möglicherweise auch Probleme verursachen kann.

Also ... die Nachricht hier bekommen? Probleme, Probleme mit Problemen ... DTO ist alles

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