Question

Je suis curieux de savoir ce que ressent la communauté à ce sujet. Je suis récemment la question avec un scénario NHibernate / WCF (entités ont persisté à la couche de service) et réalisé que je vais peut-être la mauvaise direction ici.

Ma question est clairement, lors de l'utilisation d'un graphique d'objets persistants (NHibernate, LINQ to SQL, etc.) derrière un service Web (WCF dans ce scénario), vous préférez envoyer ces entités sur le fil? Ou vous créer un ensemble de (références sans cyclique) briquet DTO sur?

Était-ce utile?

La solution

DTO. Utilisez AutoMapper pour le mappage objet-objet

Autres conseils

Je suis dans ce scénario à plusieurs reprises avant et parle d'expérience des deux côtés. Au départ, je ne faisais que mes sérialisation entités et de les envoyer comme il est. Cela a bien fonctionné d'un point de vue fonctionnel, mais plus je regardais en plus je réalisais que j'envoyais plus de données que je devais et je perdais la possibilité de faire varier la mise en œuvre de chaque côté. Dans les applications de service suivants, j'ai pris à DTO créé dont le seul but est d'obtenir des données à partir du service Web.

En dehors de toute Interop, avoir à penser à tous les champs qui sont envoyés sur le fil est très utile (pour moi) pour vous assurer que je ne suis pas d'envoyer des données qui ne sont pas nécessaires ou pire, ne devrait pas Descendons au client.

Comme d'autres l'ont mentionné, AutoMapper est un excellent outil pour l'entité à la cartographie DTO.

J'ai presque toujours créé dtos pour transférer sur le fil et utiliser des entités richter sur mon serveur et le client. Sur le client, ils vont avoir une certaine logique de présentation commune alors que sur le serveur, ils auront la logique métier. Correspondance entre les DTO et les entités peuvent être muet, mais il doit se passer. Des outils tels que AutoMapper vous aider.

Si vous demandez dois-je envoyer des entités sérialisés à partir d'un service Web au monde extérieur? alors la réponse est certainement non, vous allez obtenir une interopérabilité minimale si vous faites cela. DTO aider à résoudre ce problème en définissant un ensemble de « objets » qui peuvent être instanciés dans une langue que vous utilisez C #, Java, Javascript ou quoi que ce soit d'autre.

J'ai toujours eu des problèmes pour envoyer des objets NHibernate sur le fil. En particulier si vous utilisez un modèle ActiveRecord. et / ou si votre objet a des liens avec la session (beurk). Un autre résultat est méchant que NHibernate peut essayer de charger l'objet à l'entrée de la méthode (avant de pouvoir y accéder) qui peut aussi éventuellement causer des problèmes.

Alors ... faire passer le message ici? problèmes, problèmes de problèmes ... tout le chemin de DTO

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top