8.4.4 Pattern DAO (Data Access Object)

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 9

8.4.

4 Pattern DAO (Data Access Object)


Ce pattern permet de faire le lien entre la couche d'accès aux données et la couche
métier d'une application (nos classes). Il permet de mieux maîtriser les changements
susceptibles d'être opérés sur le système de stockage des données ; donc, par extension, de
préparer une migration d'un système à un autre (BDD vers fichiers XML, par exemple…).
Ceci se fait en séparant accès aux données (BDD) et objets métiers (POJO : Plain Old
Java Object).

 Problématique :

Vous disposez de données sérialisées dans une base de données et vous souhaitez les
manipuler avec des objets Java.

Cependant, votre entreprise est en pleine restructuration et vous ne savez pas si vos
données vont :

 rester où elles sont;


 migrer sur une autre base de données ;
 être stockées dans des fichiers XML;
 …

Comment faire en sorte de ne pas avoir à modifier toutes les utilisations de nos objets?
Com ment réaliser un système qui pourrait s'adapter aux futures modifications de supports de
données ? Comment procéder afin que les objets que nous allons utiliser restent tels qu'ils
sont?

 Solution :

La solution est de faire en sorte qu’un type d’objet se charge de récupérer les données
dans la base et qu’un autre type d’objet (souvent des POJO) soit utilisé pour manipuler ces
données. Nous nous sommes inspirés du schéma présenté par openclassroms pour représenter
cette solution.
Figure 1:fonctionnement du pattern DAO  : source openclassroms

Ces objets qui iront chercher les données dans la base devront être capables d’effectuer
des recherches, des insertions, des mises à jour et des suppressions. Par conséquent, on utilise
au mieux le polymorphisme… en créant une classe abstraite (ou une interface) mettant en
œuvre toutes les méthodes susmentionnées, dite aussi (CRUD).

Dans le cas de Nesher, nous avons voulu faire un échantionnage et présenter la mise
en place du pattern DAO dans le logiciel, la figure suivante montre son diagramme de classe
UML :
Figure 2: Classe DAO

La classe DAO est une classe abstraite utilisant la notion de généricité, pour faire
demander à nos objets DAO le type d’objets à sérialiser.

Code source de la classe abstraite DAO recueilli depuis éclipse et diagrammes de classe


rendu de l’outil d’analyse Understand:

package com.core.dao;

import java.sql.Connection;

import javafx.collections.ObservableList;

public abstract class DAO <T>


{
protected Connection connect ;
protected boolean status = false ;
private String message ;

public String getMessage() { return message ; }

protected void setMessage(String message)


{
if(message != null && !message.isEmpty()) this.message = message ;
}

public DAO(Connection connect)


{
this.connect = connect ;
}

public abstract boolean create(T obj) ;

public abstract boolean update(T obj) ;

public abstract boolean delete(T obj) ;

public abstract T find (Object obj);


public abstract ObservableList<T> find() ;
}

Figure 3:diagramme de classe de la classe AgentDAO


Figure 4:Arbre de Déclaration java de la classe AgentDAO

Figure 5: dépendances de la classe AgentDAO à d’autres objets du logiciel

Les point rouges précédant les losanges montre qu’il s’agit d’une classe concrète, et
celles n’en possédants pas, sont soit de classes d’exception ou des classes abstraite.
Ces deux figures (62,63) sont révélateur dans ce sens qu’elles permettent de nous
montrer avec quelle autre classe une classe considérer est en relation afin d’en surveillé les
dépendances lors de la mise en place de algorithmes et évité des mauvais facteurs de couplage
par exemple.
Code source de la classe AgentDAO, nous ne présentons que la méthode de création
d’un nouvel agent pour donner un aperçu du processus interne tels que présenter sur le
diagramme de classe :
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.core.dao.DAO;
import com.core.entites.Agent;
import com.core.entites.Enfant;
import com.core.entites.Epouse;
import com.core.exception.EnfantException;
import com.core.exception.EpouseException;
import com.core.statistique.StatistiqueNiveauEtute;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
/**
* @author KADIATA
*
*/
public class AgentDAO extends DAO<Agent>
{
public AgentDAO(Connection connect) { super(connect); }

public boolean create(Agent agent)


{
boolean status = false;

if (agent.isNew() && agent.isValid())


{
try
{
PreparedStatement prepare=this.connect.prepareStatement
(
"INSERT INTO Agent SET " +
"matricule = ? , numINSS = ? , etatCivil ?, niveauEtude
= ?, adresse = ?, email = ?, telephone = ?,idCategorie = ?,nom = ? , postnom = ? ,
prenom = ? , genre = ? ,dateNaissance = ? , " "nationnalite = ?,dateE = NOW() ,
dateM = NOW(), fonction=?, salairedeBase=? , photo = ?) ;
prepare.setString(1 , agent.getMatricule());
prepare.setString(2 , agent.getNumeroINSS());
prepare.setString(3 , agent.getEtatCivil());
prepare.setString(4 , agent.getNiveauEtude());
prepare.setString(5 , agent.getAdresse());
prepare.setString(6 , agent.getEmail());
prepare.setString(7 , agent.getTelephone());
prepare.setInt(8 , agent.getCategorieAgent()) ;
prepare.setString(9 , agent.getNom());
prepare.setString(10 , agent.getPostnom());
prepare.setString(11 , agent.getPrenom());
prepare.setString(12 , agent.getGenre());
prepare.setString(13 , agent.getDateDeNaissance());
prepare.setString(14 , agent.getNationalite());
prepare.setString(15, agent.getFonction());
prepare.setString(16, agent.getSalairedeBase());
prepare.setString(17, agent.getPhoto());
int etat = prepare.executeUpdate();

if(etat == 1) status = true ;


}
catch (SQLException e)
{
e.getMessage() ;
}
}
return status ;
}
}

Pour des questions de performances et de sécurité nous avons utilisé des requêtes
préparées. Avec l’objet PreparedStatement.

Diagramme de classe de la classe PointageDAO.


Figure 6:diagramme de classe de PointageDAO
Figure 7: Arbre de Déclaration java de la classe PointageDAO

Figure 8: dépendances de la classe PointageDAO à d’autres objets du logiciel

 Conséquences :
 Nos objets de base sont utilisés via des objets Java
 Nesher interagit avec la base de données en encapsulant l’accès à celle-ci et est
ainsi préparé à une éventuelle migration du système de stockage en cas de
changement et cela sans avoir à impacter la couche métier du logiciel.

Vous aimerez peut-être aussi