12
votes

Utilise des objets de transfert de données dans EJB3 considéré comme une meilleure pratique

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)?


0 commentaires

6 Réponses :


4
votes

C'est une question très intéressante et celle que j'ai enquêté et expérimente sur le passé deux ans.

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).

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.

Par exemple:

  • Si vous utilisiez une couture, vous voudrez peut-être éviter une architecture fortement superposée, car vous avez accès à un contexte de persistance prolongé. D'autres technologies Web sans ce support ont tendance à mieux fonctionner avec un DTO qui préparait l'État au départ.
  • Si vous envoyez un message distant, l'importation est de le garder mince et léger, un DTO fonctionnerait généralement mieux ici qu'un objet de domaine riche. Ici, vous pouvez supprimer de manière transparente des problèmes / comportements d'ormes de manière transparente.
  • DTO Motif bénéficie de la protection de vos clients des changements de domaine. Ceci est particulièrement important si votre application est un service Web, ayant un objet de domaine (entité) qui définit votre contrat pourrait vous laisser déconlevé à un moment donné.

    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.


0 commentaires

1
votes

Je pense que l'existence DTOS est liée à jpa / hibernate défauts . 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 :)


0 commentaires

2
votes

Couplage serré? S'il vous plaît expliquer.

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.

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?


0 commentaires

0
votes

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 ...


0 commentaires

0
votes

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é.

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.

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.


0 commentaires

1
votes

J'ai plusieurs problèmes contre l'utilisation d'entités à la couche de présentation:

  • verrouillage : 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à.

  • Sécurité : 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 DTO: s Vous pouvez masquer ceci sur le serveur avec des cartes de session très simples.

  • Différence des besoins : 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 . Les besoins de l'interface graphique ont tendance à se glisser sur votre modèle qui l'obscurcissent.

  • vitesse : 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.

    J'ai des problèmes contre dto: s aussi:

    • Code DAO supplémentaire.

      Les choses considérées, je voterai pour utiliser dto: s pour tous les projets, éliminant jpa aussi. Donc, ma pile devient quelque chose comme:

      • MyBatis pour l'accès à la base de données
      • pojo comme DTO: S
      • EJB apatride pour mes services DAO.
      • StatefletJB pour Backend GUI.
      • JSF pour la présentation.

0 commentaires