Bien que évidemment, tous les scénarios puissent être couverts par une seule conception, est-il généralement ressenti maintenant que les classes ORM doivent être transmises à la présentation et à la couche d'entreprise (locale ou distante), remplaçant le besoin d'objets de transfert de données. ? Autant que je sache, l'utilisation de classes Orm présente des problèmes de chargement impatient inutiles, de problèmes de gestion de contexte et de couplage serré, mais évitent également beaucoup de temps et conserve des choses simples. Y a-t-il maintenant une approche standard qui favorise généralement une sur l'autre (pour la majorité des situations)? P>
6 Réponses :
C'est une question très intéressante et celle que j'ai enquêté et expérimente sur le passé deux ans. P>
Je pense qu'il n'y a pas vraiment de bonne ou mauvaise réponse ici. Je ne pense pas que vous puissiez simplement dire que j'en veux un sur l'autre parce que vous pouvez généralement vouloir un hybride en fonction de vos clients (webpage, ws, machine et / ou local, à distance). P>
La chose importante à retenir ici est ce que les avantages et les inconvénients sont à chaque offre et l'appliquant ceci en fonction de vos besoins. P>
Par exemple: P>
En enveloppant votre système en couches et en l'exposant et les sécurisez soigneusement, vous pouvez produire diverses API pour de nombreux clients de différents types. p>
Je pense que l'existence DTOS est liée à jpa / hibernate défauts em>. Si vous pouviez toujours effectuer une initialisation paresseuse de manière transparente, vous ne les utiliserez jamais. Ainsi, l'utilisation de DTO est un contrat dans lequel mon espace de travail / espace de travail perd toujours (duplication partout). Résumé, vous pouvez les utiliser, mais vous devez les détester :) p>
Couplage serré? S'il vous plaît expliquer. P>
Quant à moi DTO est un anti-motif. EJB3 nous permet d'omettre les utiliser. Vous pouvez simplement forcer votre initialisation paresseuse avant d'envoyer une entité au client. P>
Bien sûr, si vous n'avez besoin que de deux champs de 30 pour envoyer à un client, vous venez de les envoyer. Mais si c'est l'ensemble des copies tout le temps comme dans mon projet actuel - essayez de vous débarrasser de cette DTO. Je ne vois aucune raison de les utiliser. Vous envoyez un objet métier au client en tant que client demandé. Pourquoi utiliser Wrapper? P>
Je suis d'accord avec le dernier "haut-parleur" pourquoi utiliser un wrapper quand dans ejb3 ?? Nous construisons un système assez complexe sans DTP mais en utilisant des entités (JPA), il a fonctionné. C'était clair ... P>
Travailler uniquement avec des entités irait bien si le contrôleur d'interface graphique envoie des propriétés d'objet aux formulaires et non d'objets d'entité. D'autre part, si des entités sont utilisées et que ces entités ont des relations de plusieurs à une, on devrait s'attendre à voir des exceptions désagréables, si les entités ne sont pas extraites avec impatience par le gestionnaire d'entité. P>
On peut observer de telles situations lors de la tentative de remplissage des étiquettes du ressort MVC, par exemple, ou des constructions similaires d'autres composants d'interface graphique. P>
En outre, les DTO sont un très bon endroit pour placer des annotations supplémentaires telles que des annotations de validation ou Jaxb, etc. p>
J'ai plusieurs problèmes contre l'utilisation d'entités à la couche de présentation: P>
verrouillage fort>: cela crée finalement le verrouillage serré entre votre présentation et votre modèle. Il devient coûteux de changer soit, dans de grands projets, voire impossible. Les outils modernes ne sont pas encore là. P> LI>
Sécurité forte>: Avec des objets de modèle, vous transférez facilement diverses informations d'identification de base de données sur vos pages Web. C'est une question de sécurité claire. Utilisation de Différence des besoins forts>: Les vues de l'interface graphique sont rarement directes des objets de modèle. Plus souvent, ils sont quelque chose de plus, combinés bêtes, guish em>. Les besoins de l'interface graphique ont tendance à se glisser sur votre modèle qui l'obscurcissent. P> li>
vitesse forte>: avec des entités, chaque champ est traité chaque fois que vous lisez / écrivez-les. Depuis que vous les transmettez directement au calque de présentation, vous avez du mal à essayer d'optimiser votre JPA -Useries - presque impossible. Je reviens certainement pour diriger JDBC -Access - comme MyBatis dans les projets futurs. Éliminant ainsi orm. P> li>
ul>
J'ai des problèmes contre Les choses considérées, je voterai pour utiliser DTO: s code> Vous pouvez masquer em> ceci sur le serveur avec des cartes de session très simples. P> li>
dto: s code> aussi: p>
dto: s code> pour tous les projets, éliminant
jpa code> aussi. Donc, ma pile devient quelque chose comme: p>