Académique Documents
Professionnel Documents
Culture Documents
pour la persistance des objets conception que lon peut utiliser pour
effectuer la persistance des objets avec le
avec DAO modle de conception DAO
DTO
Un Data Transfert Object (DTO) contient ltat
dun (ou de plusieurs) objet mtier, mais pas
son comportement
Le modle de conception DTO Ce modle de conception est utilis pour
1
La solution
Le client demande un DTO qui contient
toutes les valeurs dont il a besoin
Cet objet est construit sur le site distant et
pass en une seule fois au client
Le modle de conception DAO
Les DTO peuvent aussi tre utiliss pour (Data Access Object)
modifier les proprits des objets distants
DAO DAO
Le modle de conception DAO permet disoler La persistance est dlgue des objets
le code li la persistance des donnes ddis, appels DAO
Quand lapplication a besoin deffectuer une
Sans doute le modle de conception le plus
utilis dans le monde de la persistance opration lie la persistance dun objet, elle
fait appel un objet DAO qui elle passe les
informations ncessaires pour effectuer
lopration
Chaque classe dobjet mtier a son propre
type de DAO
Mais le mme objet DAO est utilis pour tous
les objets dune classe dobjet mtier
R. Grin Mapping objet-relationnel page 9 R. Grin Mapping objet-relationnel page 10
2
CRUD CRUD : oprations de base des DAOs
Cet acronyme, souvent utilis dans le monde de
la persistance, dsigne les 4 oprations de base Create pour crer une nouvelle entit dans la
de la persistance qui sont implmentes dans un base
DAO : create, retrieve, update et delete Retrieve pour retrouver une ou plusieurs
Les DAO conservent ltat des objets persistants entits de la base
(dans leurs variables dinstance) et le reste de Update pour modifier une des entits de la
lapplication utilise ces mthodes pour grer la base
persistance de ces objets Delete pour supprimer une entit de la base
Les DAO peuvent aussi grer les Plusieurs variantes pour les signatures de
connexions/dconnexions la source de ces mthodes dans les DAOs
donnes
R. Grin Mapping objet-relationnel page 13 R. Grin Mapping objet-relationnel page 14
create create
La dernire variante ne convient que si lobjet Le type retour peut tre
mtier a toutes ses proprits publiques et sil
n void (la variante la plus utilise)
est transportable si cest un objet distant
n boolean, pour indiquer si la cration a pu
Elle augmente la dpendance de la couche de
avoir lieu
persistance vis--vis de la couche logique, ce
n un identificateur de lentit ajoute
qui est plutt ngatif
n un objet mtier correspondant lentit
De plus elle nest pas vraiment adapte aux
modles objet avec des hirarchies dhritage ajoute
complexes La variante avec objet mtier a les mmes
Cependant cette variante peut tre pratique et inconvnients (et avantages) que pour le
performante dans les cas o elle est applicable passage de paramtre dun objet mtier
R. Grin Mapping objet-relationnel page 17 R. Grin Mapping objet-relationnel page 18
3
retrieve Finder qui retourne un objet
3 types de finder suivant quil retourne On lui passe en paramtre un identificateur
n un seul objet de lentit cherche
n une collection dobjets Il retourne un objet mtier qui correspond
n une valeur calcule partir de plusieurs lentit cherche, ou un DTO qui contient les
entits (agrgation) donnes de lentit cherche
Finder qui retourne une collection Finder qui retourne une valeur
On lui passe en paramtre le critre de
slection, sous une forme quelconque Les valeurs calcules partir des donnes
de plusieurs entits (exemple : total des
n objet ou valeurs critre de slection
salaires) peuvent sobtenir partir dobjets
n objet exemple
chargs en mmoire
Le type retour peut tre trs divers :
Mais il peut tre prfrable de ne pas crer
n ResultSet les objets et dinterroger directement la base
n RowSet de donnes qui est optimise pour ce type de
n Collection (Collection, List, Set,) requte
dobjets mtier ou de DTOs Un DAO peut ainsi comporter une mthode
n tableau (rare) qui renvoie le total des salaires des employs
R. Grin Mapping objet-relationnel page 21 R. Grin Mapping objet-relationnel page 22
update delete
Des variantes diverses pour les paramtres :
n identificateur + valeurs (plusieurs Pour les paramtres :
paramtres pour les valeurs ou un seul n identificateur de lentit supprimer dans
DTO) la base
n lobjet mtier dont on veut sauvegarder les n lobjet mtier correspondant lentit
modifications (ncessite un accs public supprimer dans la base
aux valeurs qui seront modifies)
Pour le type retour :
Le type retour peut tre
n void
n void
n boolean pour indiquer si la suppression a
n boolean pour indiquer si la modification a
pu avoir lieu pu avoir lieu
4
DAO et exceptions DAO et exceptions
Les mthodes des DAO peuvent lancer des Pour cela, on cre une ou plusieurs classes
exceptions puisquelles effectuent des dexception indpendantes du support de
oprations dentres-sorties persistance, dsignons-les par DAException
Les exceptions ne doivent pas tre lies un (ou DataAccessException ou
type de DAO particulier si on veut pouvoir DaoException)
changer facilement de type de DAO Les mthodes des DAO attrapent les exceptions
particulires, par exemple les SQLException,
et relancent des DAException (auxquels sont
chanes les exceptions dorigine pour faciliter la
mise au point)
R. Grin Mapping objet-relationnel page 25 R. Grin Mapping objet-relationnel page 26
5
Exemple de code Diagramme de classes (avec
utilisation de TO)
// ou styloDAO = new StyloDAO()
StyloDAO styloDAO = StyloDAO.getDAO();
Stylo stylo =
styloDAO.create(145, "Marker",
TO ou objet "noir ", 120,...);
. . . mtier
Stylo stylo = styloDAO.findById(1234);
stylo.setPrix(250);
styloDAO.update(stylo);
Cette image (et les suivantes) sont extraites du
List l = styloDAO.findAll(); Core J2EE Pattern Catalog de Sun
Diagramme de squences
DAO et connexions
Le plus souvent une connexion est ouverte
au dbut des mthodes du DAO, et ferme
la fin des mthodes
Cette stratgie peut coter cher si un pool de
connexions nest pas utilis
Le DAO peut aussi contenir des mthodes
pour ouvrir et fermer une connexion ; en ce
cas, une connexion peut tre utilise par
plusieurs mthodes du DAO
6
DAO et hritage DAO et hritage
La solution est de crer une hirarchie
Le problme : une classe a des classes parallle de classes mappers dont les
mres qui ont des proprits persistantes qui instances contiendront les mmes donnes
ne sont pas visibles de lextrieur (private, que la hirarchie de la classe dont le DAO
sans accesseurs visibles) gre la persistance (voir le pattern
Comment le DAO va pouvoir grer la Inheritance Mappers dans le livre de
persistance des instances de cette classe ? Martin Fowler donn dans la bibliographie)
Chacune des classes mappers se charge des
donnes qui la concerne pour fournir au DAO
les donnes ncessaires aux changes avec
la base de donnes
R. Grin Mapping objet-relationnel page 37 R. Grin Mapping objet-relationnel page 38
7
Le type
abstrait Code client (dbut) Code client (suite)
DAOFactory daoFactory = La ligne de code pour
// Supprime un stylo de la base
DAOFactory.getDAOFactory( changer de SGBD
styloDAO.delete(styloNo);
DAOFactory.TypeDao.MYSQL);
styloDAO = daoFactory.getStyloDAO(); // Trouve tous les stylos dune marque
// cre un nouveau stylo dans la base StyloTO styloEx = new StyloTO();
int styloNo = styloDAO.insert(...); styloEx.setMarque("Marker");
// Trouve un stylo Collection listeStylos =
StyloTO styloTO = styloDAO.find(...); styloDAO.selectTO(styloEx);
// Modifie des valeurs du TO
styloTO.setPrix(125); ...
// Modifie le stylo dans la base
styloDAO.update(styloTO);
Les DAOs
crs
8
La fabrique abstraite Une fabrique concrte
public abstract class DAOFactory {
public enum TypeDao {MYSQL, ORACLE}; public class MySQLDAOFactory
public abstract StyloDAO getStyloDAO(); extends DAOFactory {
public abstract FactureDAO getFactureDAO(); @Override
... public StyloDAO getStyloDAO() {
public static
return new MySQLStyloDAO();
DAOFactory getDAOFactory(TypeDao typeDao) {
switch (typeFabrique) { }
case MYSQL: return new MysqlDAOFactory(); @Override
case ORACLE: return new OracleDAOFactory(); public FactureDAO getFactureDAO() {
default: ... ; // erreur return new MySQLFactureDAO(); }
}
...
}
} }
R. Grin Mapping objet-relationnel page 49 R. Grin Mapping objet-relationnel page 50