Académique Documents
Professionnel Documents
Culture Documents
Arrivs ce point du tutoriel, la structure de notre application est dj bien avance : toutes les
fonctionnalits ne sont pas encore implmentes mais l'architecture en est clairement dfinie.
Avant d'aller plus loin dans l'implmentation des fonctionnalits, rappelons-nous que nous
dveloppons ici la partie serveur de notre application. Elle gre et traite les donnes stockes
dans la base de donnes dans le but de les envoyer ensuite au client. Et si nous ne nous
sommes pas encore proccup explicitement de cette partie client, il ne faut tout de mme pas
l'oublier.
C'est prcisment l'objet de ce chapitre : prendre en compte le fonctionnement client-serveur et
prvoir les changes de donnes qui s'effectueront entre client et serveur.
Pour rsoudre ce problme, il existe un design pattern nomm DTO, pour Data Transfer Object.
Il consiste crer une nouvelle reprsentation du modle de donnes, pur et pens pour le
transport des informations fournies par un DAO.
Pour mieux comprendre, voyons tout de suite comment crer un DTO correspondant l'objet
mtier User. Nous allons donc crer un nouveau package dans notre projet, que nous
nommerons fr.mistra.pgejee.dto, qui contiendra une classe UserDTO.
Cette classe sera trs semblable la classe mtier User. Mais pour viter les envois en boucle
induits par l'association bidirectionnel User - Event, la classe UserDTO contiendra une
collection, non plus d'Events, mais des identifiants des Events que possdent la classe User.
import java.util.List;
public UserDTO()
// Getters et setters
}
La cration d'un UserDTO partir d'un User donn sera confie au DAO. En effet, c'est cette
couche DAO qui extrait les informations venant de la base de donnes et qui les envoie ensuite
pour qu'elles soient transfres au client.
Dans l'interface UserDAO, nous allons donc ajouter la mthode suivante :
import java.util.ArrayList;
import org.hibernate.Session;
import fr.mistra.pgejee.dto.UserDTO;
import fr.mistra.pgejee.utils.Factory;
import fr.mistra.pgejpa.model.Event;
import fr.mistra.pgejpa.model.User;
return uDTO;
}
}
Les attributs dits "simples" (id, login, mot de passe et adresse email) voient simplement leurs
valeurs recopies depuis l'User pass en paramtre.
Pour les Events, par contre, il faut creer une liste d'entiers que nous remplissons l'aide des
identifiants des Events contenus dans l'User donn en paramtre (lignes 41 45).
Puisque les changes de donnes entre client et serveur se feront dans les deux sens, nous
aurons galement besoin de la mthode inverse qui permettra, partir d'un UserDTO, de
rcuprer l'objet mtier User. L encore, c'est le DAO qui s'en charge :
package fr.mistra.pgejee.dao;
import java.util.ArrayList;
import org.hibernate.Session;
import fr.mistra.pgejee.dto.UserDTO;
import fr.mistra.pgejee.utils.Factory;
import fr.mistra.pgejpa.model.Event;
import fr.mistra.pgejpa.model.User;
Le passage d'un User vers un UserDTO ncessite la rcupration d'Events partir de leur
identifiant (lignes 28 32). Ce type de rcupration est du ressort de l'EventDAO, auquel nous
allons donc ajouter une mthode getFromId :
// Renvoie l'Event dont l'id est pass en paramtre
public abstract Event getFromId(Integer id);
dont l'implmentation dans EventDAOHibernate consiste en une simple requte HQL :
// Renvoie l'Event dont l'id est pass en paramtre
public Event getFromId(Integer id) {
// Rcupration d'une session Hibernate
if(s == null)
s = HibernateUtils.getSession();
Ceci tant fait, nous pouvons maintenant modifier la classe UserService pour intgrer notre
nouveau modle DTO : les objets envoys et reus par le Service doivent dsormais tre des
UserDTO et non plus des User.
Le passage de l'un l'autre se faisant toujours par l'intermdiaire du UserDAO, la nouvelle
classe UserService est donc la suivante :
package fr.mistra.pgejee.services;
import fr.mistra.pgejee.dao.UserDAO;
import fr.mistra.pgejee.dto.UserDTO;
import fr.mistra.pgejee.utils.Factory;
import fr.mistra.pgejpa.model.User;
return uDAO.createDTO(savedUser);
}
Nous comprenons maintenant l'utilit des DTO et savons les crer et les manipuler. Etudions
donc les ajouts ncessaires l'intgration des DTOs dans la dernire fonctionnalit non
modifie : l'enregistrement d'un nouvel vnement.