Quelle est la meilleure pratique pour envoyer des données au client: POCO ou DTO?
Je démarre un projet en utilisant EF 4 et POCO.
Quelle est la meilleure pratique pour envoyer des données au client ? Devrais-je envoyer le POCO ou je devrais avoir un DTO à la place?
Y a-t-il un problème que je devrais connaître lors de l'envoi de l'entité (déconnectée du contexte) au client ?
Est-ce une pratique recommandée d'envoyer le POCO à la couche client?
4 réponses
Pour moi, L'une des principales raisons d'utiliser EF4 avec POCO est le fait que vous n'avez pas besoin de DTO. je peux comprendre l'utilisation de DTO avec des fichiers EDMX traditionnels où vos entités sont assez gonflées, mais ce n'est pas le cas.
Votre POCO doit évidemment être sérialisable, mais il ne devrait vraiment pas y avoir de problèmes spécifiques à l'envoi D'entités POCO qui ne se produisent pas aussi avec les DTO.
Je crois que nous mélangeons ici 2 définitions qui n'ont pas de relation les unes avec les autres.
Dto ou Data Transfer Object est un modèle de conception, vous pouvez l'utiliser pour transférer des données entre les couches, et ils n'ont pas de comportement. Martin Fowler explique cela très bien à: http://www.martinfowler.com/eaaCatalog/dataTransferObject.html
D'autre part, nous avons POCO ou un ancien objet CLR. Mais pour parler de POCO, nous devons savoir où cela a commencé, C'est-à-dire POJO, ou Objet Java Ancien Simple. Martin Fowler avec deux partenaires a inventé le terme et il l'explique ici: http://www.martinfowler.com/bliki/POJO.html
Donc, les poco peuvent avoir un comportement et tout ce que vous voulez. Ce sont les mêmes classes communes que vous écrivez dans votre base quotidienne, ils leur ont juste donné ce nom pour les appeler d'une manière courte et facile à retenir.
En réponse à votre deuxième question, je pense que la meilleure approche et celle que je recherche toujours est d'envoyer des Dto de la couche Busines à tout ce qui l'utilise (par exemple: vos services, site web, application de bureau, application mobile, etc.). C'est parce qu'ils n'ont pas de comportement et pas à peu près que des propriétés dans la plupart des cas, donc ils sont légers et idéalement à utiliser dans les services, et bien sûr, ils ne révèlent pas de données sensibles de votre entreprise.
Cela étant dit, si vous prévoyez d'utiliser DTO, je peux vous recommander de télécharger EntitiesToDTOs, un générateur de DTO Entity Framework que je viens de publier sur CodePlex, il est gratuit et open source. Aller à http://entitiestodtos.codeplex.com
J'ai une opinion un peu différente des opinions ci-dessus. Je crois que Dto ou ViewModel est toujours nécessaire pour le côté extérieur de la couche serveur. Dans l'application du monde réel, il y a quelques couches de vue qui n'ont besoin que d'un objet de domaine, c'est-à-dire que presque toutes les vues ont besoin de plusieurs objets de domaine. Et tous ces objets de domaine sont enveloppés dans une classe Dto ou ViewModel. C'est pourquoi j'insiste sur le fait que DTO ou ViewModel est toujours nécessaire même s'ils sont POCO.
Je considérerais EF4 entities business models et viewmodels regroupés en un seul. Ils implémentent déjà PropertyChanged hors de la boîte, par exemple. Classes partielles peuvent fournir des fonctionnalités personnalisées si vous avez besoin d'. La mise en miroir des entités avec votre propre couche de sécurité crée un travail et une maintenance inutiles, à mon avis.
Je crois à la séparation de la logique métier et de tout le reste. Cependant, dans le cas D'EF4, le travail est déjà fait pour vous. Aller de noix.