Entités de L'app et / ou Dto
Quelle est l'idée générale pour aider à décider quand utiliser DTO et quand utiliser Entity dans ces cas ?
- UI / côté serveur java appelant les services. Devrait-il recevoir / envoyer des entités ou Dto ?
- service Web appelant les services. Les services devraient-ils accepter les entités ou les DTO ?
j'aime la lecture du code qui passent entités :
- plus simple à faire circuler, pas besoin de faire la correspondance avec les DTO
- n'ont pas besoin de supplément les classes
- les relations avec d'autres entités sont déjà définies, il n'est donc pas nécessaire de combiner les DTO apparentés en un seul DTO
- juste Pojo
mais il y a des arguments à propos de DTO que la correspondance à une entité est plus sûre, parce que c'est un contrat, et l'entité peut changer à n'importe quelle forme, et le dto restera le même. Par exemple, comme l'entité a un nom de champ, et la DTO a aussi un nom de champ. Plus tard, si l'exigence change, la table de base de données change, l'entité peut changer aussi, changer le nom en prénom et lastName. Mais le DTO aura toujours un nom de champ, qui est firstName + lastName.
voici Donc la liste des avantages de l'utilisation des Otd :
- compatible du point de vue du code qui accepte les Dto
les inconvénients de La DTO, je pense :
- doit définir les classes DTO et la cartographie (peut-être en utilisant dozer)
- les programmeurs devraient analyser quand utiliser DTO et entity, je veux dire passer DTO pour chaque méthode est un gâchis
- frais généraux de conversion des entités en DTO et vice versa
- Je ne suis toujours pas sûr de la relation un-à-plusieurs sur la façon de les cartographier. Dans JPA nous pouvons paresseusement initialiser ceci, mais en passant dans DTO, devrais-je initialiser ceci ou non. En peu de temps, les DTOs ne peuvent pas avoir de proxies initialisés paresseux, ne contient que des valeurs.
Merci de partager vos pensées ..
Merci !
Voici quelques citations de différents endroits
pro dto:
réutilisation de la classe entity comme un DTO semble désordonné. L'API publique de la catégorie (y compris les annotations sur public méthodes) ne définit plus clairement fin de contrat, il est présenter. La classe va se retrouver avec des méthodes qui ne sont pertinentes que lorsque la classe est utilisée comme un DTO et certaines méthodes qui ne seront pertinente lorsque la classe est utilisé comme une entité. Préoccupations ne seront pas clairement séparées, et les choses seront plus étroitement couplé. Pour moi, c'est un prise en compte plus importante de la conception puis d'essayer d'économiser sur le nombre de classe les fichiers créés.
pro entity:
absolument pas!!!
les entités JPA sont mises en correspondance avec une base de données, mais ils ne sont pas " lié " à une base de données. Si la base de données change, vous changez les mappages, pas la objet. Le les objets restent les mêmes. C'est l' toute la question!
2 réponses
je pencherais pour la DTO option pour les raisons suivantes:
- l'interface de service doit être indépendante de la base de données, un changement dans l'une ne doit pas toujours nécessiter un changement dans l'autre.
- vous faites l'hypothèse que vos services seront toujours appelés par un client Java
- Utilisation de chargement différé lorsque l'objet est en revanche d'un appel de service web ne fonctionne pas bien.
Pro DTO:
1. UI la plupart du temps exigent certaines propriétés qui sont seulement pour passer des arguments représentant L'état D'UI. Cet état n'est pas nécessaire d'être persisté par conséquent, pas nécessaire pour être utilisé sur les entités.
2. La logique opérationnelle devrait être à l'intérieur des entités ou dans les classes d'aide pour les entités. Vous ne devez pas partager cela avec la couche UI/Presentation ou avec le Client qui l'appelle.
3. Le changement d'entité ne nécessite parfois pas de changement de DTO et vice versa.
4. Plus facile d'effectuer des validations de niveau système sur les DTO dans les services D'assurance-chômage, empêchant ainsi l'appel aux Services Aux Entreprises alors qu'il ne le devrait pas.
5. Vous pouvez implémenter/utiliser d'autres cadres de validation librement lorsque L'interface utilisateur reçoit un DTO plutôt qu'une entité remplie de données provenant de l'interface utilisateur.
6. La couche UI/Presentation est vaguement couplée.
voici un flux d'échantillon lorsque les DTO sont utilisés:
UI --> MVC -- > système Validations à l'aide des services D'assurance-chômage --> Délégué Commercial --> Services commerciaux --> persistent.