Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Objet d'accès aux données — Wikipédia
Objet d'accès aux données — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Data Access Object)

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.
Page d’aide sur l’homonymie

Pour les articles homonymes, voir DAO.

Un objet d'accès aux données (en anglais data access object ou DAO) est un patron de conception (c'est-à-dire un modèle pour concevoir une solution) utilisé dans les architectures logicielles objet.

Utilisation

[modifier | modifier le code]

Les objets en mémoire vive sont souvent liés à des données persistantes (stockées en base de données, dans des fichiers, dans des annuaires…). Le modèle DAO propose de regrouper les accès aux données persistantes dans des classes à part, plutôt que de les disperser. Il s'agit surtout de ne pas écrire ces accès dans les classes "métier", qui ne seront modifiées que si les règles de gestion métier changent.

Ce modèle complète le modèle MVC (modèle-vue-contrôleur), qui préconise de séparer dans des classes les différentes problématiques :

  • des vues : charte graphique, ergonomie
  • du modèle : cœur du métier
  • des contrôleurs : tout le reste ; l'enchaînement des vues, les autorisations d'accès…

Avantages et inconvénients

[modifier | modifier le code]

L'utilisation de DAO permet de s'abstraire de la façon dont les données sont stockées au niveau des objets métier. Ainsi, le changement du mode de stockage ne remet pas en cause le reste de l'application. En effet, seules ces classes dites "techniques" seront à modifier (et donc à re-tester). Cette souplesse implique cependant un coût additionnel, dû à une plus grande complexité de mise en œuvre.

Exemple en Java

[modifier | modifier le code]

Voici un exemple concret d'implémentation du pattern DAO en Java qui illustre la séparation entre la logique métier et l'accès aux données.

Une classe métier :

public class Client {
    private int id;
    private String name;
    
    // Getters et setters
    public int getId() { return id; }
    public String getName() { return name; }
    
    // Méthodes métier
    public void contact(Client otherClient) { ... }
    ...
}

Client représente l'objet métier qui contient uniquement les données et le comportement liés au concept de client, sans aucune logique d'accès aux données.

Une classe technique :

public interface ClientDAO {
    Client setName(int id, String newName);
    List<Client> findAll();
    ...
}

Permet de définir le contrat pour toutes les opérations d'accès aux données concernant les objets Client.L' abstraction permet d'implémenter différentes stratégies d'accès aux données.

Implémantation MySQL :

public class ClientDAOMySQL implements ClientDAO {
    private Connection connexion;
    
    @Override
    public List<Client> findAll() {
        List<Client> clients;
        // Utilisation de la syntaxe SQL pour récupérer tous les clients
        // SELECT * FROM clients
        // ...code d'exécution de la requête...
        return clients;
    }
    
    @Override
    public Client setName(int clientId, String newName) {
        // Utilisation de la syntaxe SQL pour mettre à jour le nom
        // UPDATE clients SET name = ? WHERE id = ?
        // ...code d'exécution de la requête...
        
        Client updatedClient;
        // Code pour récupérer le client mis à jour depuis la base de données
        // Par exemple : SELECT * FROM clients WHERE id = clientId
        return updatedClient;
    }
    
    ...
}

Implémantation MongoDB :

public class ClientDAOMongoDB implements ClientDAO {
    private MongoCollection<Document> collection;
    
    @Override
    public List<Client> findAll() {
        List<Client> clients;
        // Utilisation de l'API MongoDB pour récupérer tous les documents
        // collection.find()
        // ...code d'exécution de la requête...
        return clients;
    }
    
    @Override
    public Client setName(int clientId, String newName) {
        // Utilisation de l'API MongoDB pour mettre à jour un document
        // collection.updateOne(Filters.eq("_id", clientId), Updates.set("name", newName))
        // ...code d'exécution de la requête...

        Client updatedClient;
        // Code pour récupérer le client mis à jour depuis la base de données
        // Par exemple : collection.find(Filters.eq("_id", clientId)).first()
       return updatedClient;
    }
    
    ...
}

Il est important que cette classe cache complètement d'où viennent les données : elle doit donc renvoyer des objets métier (et non un curseur, un enregistrement…).

public class DAOFactory {
    public enum TypeBase { MYSQL, MONGODB }
    
    public static ClientDAO getClientDAO(TypeBase type) {
        switch (type) {
            case MYSQL: return new ClientDAOMySQL();
            case MONGODB: return new ClientDAOMongoDB();
            default: throw new IllegalArgumentException("Type non supporté");
        }
    }
}

Fournit un moyen de créer l'implémentation DAO appropriée sans que le client ne connaisse les détails de l'instanciation. Cela permet de changer facilement de système de stockage sans modifier le reste du code.

Une classe gestionnaire d'objets :

public class ClientManager {
    private ClientDAO clientDAO;
    
    public ClientManager(DAOFactory.TypeBase typeBase) {
        this.clientDAO = DAOFactory.getClientDAO(typeBase);
    }
    
    public void displayAllClient() {
        List<Client> clients = clientDAO.findAll();
        
        System.out.println("clients:");
        for (Client client : clients) {
            System.out.println("- " + client.getName());
        }
    }
    
    public Client setClientName(int idClient, String newName) {
        return clientDAO.setName(idClient, newName);
    }
}

Il se concentre uniquement sur les opérations métier à effectuer avec ces données.

Exemple d'utilisation :

public static void main(String[] args) {
        ClientManager clientManager = 
new ClientManager(DAOFactory.TypeBase.MYSQL); // Ou DAOFactory.TypeBase.MONGODB
        clientManager.displayAllClient();
        Client client = clientManager.setClientName(1, "Dupont");
        System.out.println("Client updated: " + client.getName());
}

On retrouve bien ici une structure de code qui ne change pas si on change de stockage !

Types d'accès aux données

[modifier | modifier le code]

Il peut exister autant de types de DAO que de moyens de persistance des données.

  • Fichiers : VSAM, binaires, XML…
  • Base de données : relationnelles (cf. mapping objet-relationnel) ou autres.
  • Annuaires LDAP, Active Directory…

Des bibliothèques logicielles sont d'ailleurs conçues spécifiquement pour prendre en charge ces aspects.

  • pour les bases de données : JDBC, JPA, iBATIS, Hibernate, TopLink, JDO…

Liens externes

[modifier | modifier le code]
  • Le patron DAO dans J2EE
v · m
Patrons de conception
Création
  • Fabrique abstraite
  • Monteur
  • Fabrique
  • Prototype
  • Singleton
Structure
  • Adaptateur
  • Pont
  • Composite
  • Décorateur
  • Façade
  • Poids-mouche
  • Proxy
Comportement
  • Chaîne de responsabilité
  • Commande
  • Interpréteur
  • Itérateur
  • Médiateur
  • Mémento
  • Observateur
  • État
  • Stratégie
  • Patron de méthode
  • Visiteur
Fonctionnel
  • Fermeture
  • Curryfication
  • Composition de fonctions
  • Foncteur
  • Monade
  • Générateur
Patron d'architecture
  • ADR (en)
  • Active record
  • Broker (en)
  • Client-serveur
  • DAO
  • Data mapper
  • DTO
  • DDD
  • ECB
  • ECS (en)
  • EDA
  • Front controller (en)
  • Identity map (en)
  • Interceptor (en)
  • Implicit invocation (en)
  • Inversion de contrôle
  • Model 2 (en)
  • MOM
  • Microservices
  • MVA (en)
  • MVC
  • MVP
  • MVVM
  • Application monolithe
  • Architecture en couches
    • trois tiers
  • Naked objects (en)
  • Pair-à-pair
  • Publish-subscribe
  • PAC
  • POC
  • REST
  • SOA
  • Service locator (en)
  • SN (en)
  • SBA (en)
  • Specification (en)
Autres patrons
  • Modèle de Seeheim
  • Mémoïsation
  • Post-redirect-get
  • Support d'initialisation à la demande
  • Signaux et slots
  • Désignation chaînée
  • Double-checked locking
  • MapReduce
  • Reactor
  • Fonction de rappel
  • icône décorative Portail de la programmation informatique
  • icône décorative Portail des bases de données
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Objet_d%27accès_aux_données&oldid=224361903 ».
Catégories :
  • Base de données
  • Patron de conception
Catégories cachées :
  • Wikipédia:ébauche informatique
  • Article contenant un appel à traduction en anglais
  • Portail:Programmation informatique/Articles liés
  • Portail:Informatique/Articles liés
  • Portail:Bases de données/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id