Envoyé par
manblaizo
Je crois qu'on a petit problème de définition des concepts DAO, DTO,... on n'a pas l'air de parler de la même chose. Je vais essayer d'éclaircir comment je vois les choses, en allant dans le même sens que heid. Un DAO tel que le comprend et l'utilise, Data Access Object, c'est une abstraction de la façon dont l'application accède au stockage persistent (BDD, fichier XML...). Son implémentation peut être en Hibernate avec des session.save()..., en JPA ou utiliser du SQL pur, cela importe peu pour le reste de mon application du moment que j'utilise une interface pour abstraire le DAO. Donc les entités métier ne font pas partie de la couche DAO, mais elles ont persistées à travers la couche DAO.
Pour ce qui est du DTO (Data Transfer Object), c'est un objet qui fait mirroir à l'objet persistent en reprenant la plupart de ses champs, avec getter/setter, dans le seul but transférer les données de l'objet persistent vers la couche présentation. C'était très utile avec les Entity Beans (EJB2 encore une fois) parce que c'était une bonne pratique de ne pas les renvoyer à la couche présentation, et donc il fallait copier leurs données dans un autre objet conçu pour cela, le DTO.
Ce que je voulais dire à propos du lazy loading, c'est qu'avant de créer et remplir le DTO (par copie de l'objet persistent), il faut d'abord charger l'objet persistent lui-même ainsi que ses associations, et c'est donc à ce moment-là qu'il faut traiter l'éventuel problème de lazy loading, ce n'est pas l'utilisation d'un DTO qui changera quelque chose à cela.
J'espère que cela clarifie un peu le point de vue que je défend.