Utilisation d’un service WCF avec Entity Framework 4 et… DTO?

Comme décrit ci-dessus, je suis en train de mettre en œuvre une architecture à plusieurs niveaux pour fonctionner avec WCF et Entity Framework 4 (avec poco). Puisque je suis déjà persistant dans l’ignorance avec POCO, ai-je besoin d’implémenter DTO ou puis-je utiliser WCF à sa manière?

La citation principale est la suivante: j’ai besoin de DTO pour transmettre un object léger sur le réseau ou je peux utiliser mes entités POCO.

Que recommandez-vous les gars?

Il est difficile de répondre à moins que vous définissiez ce qu’est la “manière pure”. Parlons-nous de SOA pure ou de WCF pure?

Les mandataires WCF sont déjà des DTO, car ils n’apportent aucune logique métier dans votre contrat de service. La création d’une autre couche de DTO au-dessus des classes proxy générées par WCF semble redondante.

La plus grande question à laquelle vous voulez répondre est “comment cette solution est-elle une SOA?”. Vous ne pouvez pas partager vos entités POCO entre les frontières de services si vous souhaitez être conforme à la SOA. La SOA concerne tous les contrats.

Si vous utilisez toutes les technologies SOA, vous perdrez beaucoup de fonctionnalités, car les classes avec lesquelles votre niveau Web travaillera travailleront la plupart du temps en tant que mandataires stupides. Vous devrez répéter beaucoup de logique et vous aurez perdu une grande partie de la fonctionnalité “méta-données, convention sur la configuration” fournie par MVC 2.

Si vous lancez le mot à la mode SOA dans le destructeur, ce que vous devez faire ( http://soafacts.com/ ), vous aurez beaucoup plus de facilité à partager la logique métier et les informations de métadonnées entre niveaux. Si vous êtes le seul consommateur de votre service Web, cette méthode est probablement votre meilleur choix.

C’est là que vous pouvez utiliser des DTO pour envoyer sur le réseau à la place de vos entités POCO. Le seul inconvénient est encore une fois, la logique qui se répète, et beaucoup de code cérémonial de la plaque de la chaudière qui ne fait rien. Cela dépend vraiment de la taille de votre projet. Si c’est petit, oubliez les DTO, mais si vous avez 20 développeurs travaillant avec 200 000 LdC, les DTO mériteraient probablement d’être créés.

Comme Jfar l’a dit, cela dépend de savoir si vous allez utiliser uniquement le service, ou si vous voulez que le niveau présentation soit réservé à vous.

Si vous faites cela plus tard et que vous n’utiliserez que votre service, vous pouvez sérialiser vos POCO entre les limites du service wcf. C’est quelque chose que j’ai fait récemment et qui a écrit ce billet sur son travail. Cela vous permettra d’utiliser les mêmes entités dans la couche d’applications et la couche de présentation.

J’espère que ça aide.

La raison la plus forte de recommander un DTO lors de l’utilisation de WCF avec EF est que les premières classes de firebase database EF entraînent des dépendances d’implémentation dans vos classes de proxy. Si vous utilisez d’abord le code avec les classes POCO, aucune dépendance d’implémentation ne devrait exister.

Essayez de renvoyer uniquement vos classes POCO, puis examinez de près les classes de proxy générées. Assurez-vous que rien dans ces classes ne fait partie de l’infrastructure EF. Si les classes de proxy sont propres, alors vous devriez être tous ensemble.