Généralement, si vous allez retourner des données d'un service, vous voudrez retourner une classe spécifique dans le but du service, contenant ce qui est pertinent pour cet appel de service, un objet DTO (Data Transfer Object) ou DataContract dans le monde WCF.
Un outil particulièrement utile pour le mappage entre entités et DTO est AutoMapper. Que vous utilisiez AutoMapper ou simplement un codage «gauche-droite», cela évitera le chargement paresseux/l'exécution différée car le mappage provoquera l'exécution.
Il y a un certain nombre de raisons pour lesquelles il pourrait ne pas être une bonne idée de retourner une entité d'un service, voici quelques-unes (il y a des opinions différentes sur la plupart de ces)
- En fonction de votre persistance (dans votre cas nhib) vous pouvez avoir un comportement (exécution retardée) ou un état attaché à vos entités qui ne s'exécuteront pas correctement dans une autre application ou un autre serveur
- Les résultats d'une entité de retour dans une couche de service entraînent souvent des appels qui sont très CRUD- comme, résultats dans une couche de service très bavard, et très un-SOA
- Différents appels pourraient nécessiter plus ou moins de données que juste ce qui est une entité, un DTO vous donne la possibilité de conclure exactement ce dont vous avez besoin, et rien que vous n'avez pas.
- Si vous essayez de créer une couche de service réutilisable, vous ne devez pas supposer que vos clients ont accès à votre logique d'entité ou de domaine autre que celle de votre service. ils pourraient être écrits dans une autre application, une autre langue, etc. Si vos entités sont ce que vous utilisez pour déplacer des données, vous aurez tendance à oublier cela.
Je viens de réaliser à quel point cette question est ancienne. Oups, oh bien. – Brook
Honnêtement, cela m'a été utile aujourd'hui. :) – Mayo