J'ai certains objets Java capables de persistance avec tous les @annotations dans mon application web. Tous ces objets résident dans une couche de données. Est-ce une bonne pratique d'utiliser ces objets de persistance comme objets de transfert de données? Par exemple, si je souhaite renvoyer les données extraites du magasin de données, devrais-je renvoyer directement ces objets de persistance ou dois-je copier manuellement les données dans un DTO intermédiaire et les renvoyer à d'autres couches? Quelle approche suggérez-vous?Entités de persistance en tant qu'objets de transfert de données
Répondre
Je dirais qu'il est OK pour le faire (en fait le principal avantage de ces ORM étaient d'utiliser ces objets de domaine dans différentes couches w/o ayant DTO inutiles) si vous suivez les directives suivantes:
- Vous ne prolongez pas les limites de session, c'est-à-dire que les modifications liées à la base de données doivent toujours être effectuées à l'aide de la couche d'accès aux données que vous avez définie.
- Toutes les données dont vous avez besoin dans une autre couche (couches au-dessus du calque d'accès aux données comme Couche logique et couche de présentation) sont pré-remplies dans ces objets sinon vous obtiendrez des exceptions selon le comportement ORM.
- Ne pas étendre les limites de session pour résoudre le problème mentionné au numéro 2
Je n'ai jamais eu besoin du niveau d'abstraction supplémentaire fourni en copiant l'instance de persistance dans une classe DTO différente.
Si vous êtes absolument certain qu'aucune copie ne se retrouvera dans le stockage de session ou ne sera conservée/migrée vers une autre instance/quelque chose, il n'est pas nécessaire de le faire.
Si vous avez besoin de garder ces objets sur plusieurs sessions/demandes, alors c'est logique. Un autre cas d'utilisation est lorsque vous devez découpler très login et la couche de persistance (c'est-à-dire pour permuter différentes couches de persistance) alors le couplage à travers les annotations pourrait être gênant.
+1 bien dit. C'est exactement ainsi que nous les utilisons dans notre produit. –