7 Stimmen

Sollte ein WCF-Dienst ein EntityObject oder eine POCO/DTO-Klasse zurückgeben?

Ich habe mir viele WCF-Beispiele angeschaut, die EntityFramework verwenden, und die meisten von ihnen scheinen eine Art POCO- oder DTO-Klasse an den Client zurückzugeben.

Ich habe mich gefragt, warum das so ist, da der Standard EntityObject umfasst die [DataContract] Attribute und implementiert INotifyPropertyChanged . Ist die Rückgabe einer DTO- oder POCO-Klasse besser als eine EntityObject (oder andersherum)? Und gibt es bestimmte Fälle, in denen es besser ist, einen Rückgabewert zu verwenden als einen anderen?

8voto

Guy Starbuck Punkte 21075

Als Best Practice sollten Sie auf jeden Fall eine DTO/POCO-Klasse zurückgeben, die ausdrücklich als Datenvertrag konzipiert ist und keine Persistenzlogik hat.

Der Grund dafür ist, dass Sie bei der Übergabe eines EntityObjects davon ausgehen, dass der Verbraucher des Dienstes einen Verweis auf denselben Datenkontext hat, was gegen den SOA-Grundsatz der expliziten Grenzen verstößt. Es reduziert die Wiederverwendbarkeit Ihres Dienstes.

Es ist wahrscheinlich, dass Microsoft DataContract auf dem EntityObject implementiert hat, um einige ihrer WCF-basierten Datenbankzugriffstools wie RIA zu unterstützen. Die INotifyPropertyChanged ist für WPF-Bindungsunterstützung, und ist nicht im Zusammenhang mit WCF oder Daten Verträge.

0voto

indiPy Punkte 7580

Es lohnt sich, den POCO in einigen Fällen zurückzugeben, in denen Sie die Persistenzlogik nicht kennen. Ich meine, dass derselbe POCO an andere ORM oder für andere Zwecke angeschlossen werden kann. Ok, das ist der Vorteil von POCO gegenüber ORM, aber es gibt Ihnen auch einen Leistungsschub gegenüber EntityObject, das Proxy/Notifier zur Laufzeit hinzufügt.

Rückgabe von POCO - Sie müssen den Status der Entität manuell aktualisieren, wenn sie von WCF empfangen wird.

Rückgabe des EntityObjects - Sie erhalten die Entität mit gepflegtem Zustand.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X