8.4.4 Pattern DAO (Data Access Object)
8.4.4 Pattern DAO (Data Access Object)
8.4.4 Pattern DAO (Data Access 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 :
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.
package com.core.dao;
import java.sql.Connection;
import javafx.collections.ObservableList;
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); }
Pour des questions de performances et de sécurité nous avons utilisé des requêtes
préparées. Avec l’objet PreparedStatement.
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.