J'ai essayé de trouver un flux pour une application Web à plusieurs niveaux de base et j'ai lu des informations contradictoires en ligne. Ce que j'essaie de comprendre, c'est s'il y a un avantage à continuer à utiliser des objets DTO de votre couche DAO vers Service grâce à l'utilisation d'une sorte de mappeur.
Le flux de base que je prévois est le suivant:
- Modèle / formulaire d'interface utilisateur -> Contrôleur
- Le contrôleur convertit le modèle en objet de domaine (entité)
- Objet de domaine -> Couche de service
- Objet de domaine -> DAO
- DAO -> Objet (s) de domaine
- Service -> UI
- L'interface utilisateur convertit le domaine en modèles d'interface utilisateur
Si le DTO était suivi, DAO transmettrait un DTO et non l'entité. Après avoir fait quelques lectures, il semble que le DTO soit légèrement disparu puisque (au moins en Java) les entités sont devenues des POJO annotés, ce qui signifie que leur empreinte mémoire est devenue très petite.
Est-ce le cas, ou faut-il utiliser des DTO pour encapsuler complètement les objets de domaine au sein de la couche DAO, et si tel est le cas, que passerait la couche service au DAO?
Merci beaucoup!
L'une des raisons pour lesquelles je pense que cette discussion revient à plusieurs reprises, c'est parce que cela semble être une douleur intense de prendre un objet avec toutes les données dont vous avez besoin et de le convertir en un objet qui semble identique ou presque identique à celui vous remettez.
C'est vrai, c'est un PITA. Mais il y a plusieurs raisons (en plus de celles énumérées ci-dessus) pour le faire.
Mais, vous pouvez le gérer assez efficacement si vous encapsulez la logique de traduction dans une collection de classes de conversion
Jetez un œil à lambdaJ où vous pouvez faire 'convertir (domainObj, toDto)' il y a une surcharge de ceci pour une utilisation avec des collections. Voici un exemple de méthode de contrôleur qui l'utilise. Comme vous pouvez le voir, ça n'a pas l'air si mal.
la source