Patron d'objet d'accès aux données

Le modèle d'objet d'accès aux données ou modèle DAO est utilisé pour séparer les API ou opérations d'accès aux données de bas niveau des services métier de haut niveau. Voici les participants du modèle d'objet d'accès aux données.

  • Interface d'objet d'accès aux données- Cette interface définit les opérations standard à effectuer sur un objet modèle.
  • Classe concrète d'objet d'accès aux données- Cette classe implémente l'interface mentionnée ci-dessus. Cette classe est responsable de la récupération des données à partir d'une source de données, qui peut être une base de données, XML ou d'autres mécanismes de stockage.
  • Objet modèle/Objet valeur- Cet objet est un simple POJO, contenant des méthodes get/set pour stocker les données récupérées à l'aide de la classe DAO.

summary

intention

Séparez la logique d'accès aux données de la logique métier et encapsulez les opérations d'accès aux données dans une classe dédiée.

Principaux problèmes résolus

  • Résoudre le problème du couplage fort entre la logique métier et la logique d'accès aux données, en améliorant la maintenabilité et la réutilisabilité du code.

Cas d'utilisation

  • Lorsque la logique d'accès aux données de l'application doit être gérée de manière centralisée afin de simplifier la logique métier et de faciliter les opérations sur les données.

Approche d'implémentation

  • Définir l'interface DAO: Déclare les méthodes pour les opérations d'accès aux données.
  • Implémenter la classe DAO: Implémente l'interface DAO, encapsulant toute la logique d'accès à la source de données (comme une base de données).
  • Objet de transfert de données (DTO): Facultatif, utilisé pour encapsuler les données récupérées depuis la source de données.

Code clé

  • Interface DAO: Déclare les méthodes pour l'accès aux données et les opérations.
  • Implémentation DAO: Fournit une implémentation concrète de l'interface DAO, contenant le code d'accès à la base de données.

Exemple d'application

  • Application de gestion des utilisateurs: La classe DAO utilisateur est responsable de l'interaction avec la base de données, gérant les opérations CRUD pour les données utilisateur.

Avantages

  1. Séparation des préoccupations: Séparer la logique d'accès aux données de la logique métier, réduisant le couplage du système.
  2. Facile à maintenir: Centralise la logique d'accès aux données pour faciliter la maintenance et les mises à jour.
  3. Extensibilité: Lors du changement de source de données ou de la modification de la logique d'accès aux données, la couche de logique métier n'est pas affectée.

Inconvénients

  • Peut augmenter la complexité: Pour les applications simples, l'introduction du modèle DAO peut ajouter une couche d'abstraction supplémentaire.

Suggestions d'utilisation

  • Lorsque l'application doit interagir avec plusieurs sources de données, ou que la logique d'accès aux données est relativement complexe, utilisez le modèle DAO.

Notes

  • Les classes DAO doivent être aussi simples que possible, contenant uniquement la logique d'accès aux données et aucune logique métier.

Plusieurs rôles principaux sont inclus

  1. Interface DAO (DAO Interface):

    • Déclare des méthodes pour l'accès aux données et les opérations.
  2. Implémentation DAO:

    • Implémentez l'interface DAO, en encapsulant toute la logique d'accès à la source de données.
  3. Objet de transfert de données (DTO) (facultatif):

    • Encapsulez les données récupérées depuis la source de données pour le transfert de données entre la couche de logique métier et la couche d'accès aux données.
  4. Couche de logique métier (Business Logic Layer):

    • Utilisez l'interface DAO pour interagir avec la source de données, sans dépendre directement de l'implémentation spécifique de l'accès aux données.
  5. Source de données:

    • Base de données ou autre stockage persistant, avec lequel les implémentations DAO interagissent pour accéder aux données et les stocker.

Le patron de conception Data Access Object aide à garder une application propre et gérable en fournissant une couche d'accès aux données claire.


Implémentation

Nous allons créer un objet qui sert d'objet modèle ou d'objet valeur,StudentObjet.StudentDaoEst l'interface Data Access Object.StudentDaoImplqui est une classe d'entité qui implémente l'interface Data Access Object.DaoPatternDemo, notre classe de démonstration utiliseStudentDaopour démontrer l'utilisation du patron Data Access Object.

数据访问对象模式的 UML 图

Étape 1

Créer un objet valeur.

Student.java

public class Student { private String name; private int rollNo; Student(String name, int rollNo){ this.name = name; this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } }

Étape 2

Crée l'interface de l'objet d'accès aux données.

StudentDao.java

import java.util.List; public interface StudentDao { public List<Student> getAllStudents(); public Student getStudent(int rollNo); public void updateStudent(Student student); public void deleteStudent(Student student); }

Étape 3

Crée des classes d'entité qui implémentent l'interface ci-dessus.

StudentDaoImpl.java

import java.util.ArrayList; import java.util.List; public class StudentDaoImpl implements StudentDao { //Les listes sont traitées comme une base de données List<Student> students; public StudentDaoImpl(){ students = new ArrayList<Student>(); Student student1 = new Student("Robert",0); Student student2 = new Student("John",1); students.add(student1); students.add(student2); } @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); System.out.println("Étudiant : Numéro d'étudiant " + student.getRollNo() +", supprimé de la base de données"); } //Récupérer la liste des étudiants depuis la base de données @Override public List<Student> getAllStudents() { return students; } @Override public Student getStudent(int rollNo) { return students.get(rollNo); } @Override public void updateStudent(Student student) { students.get(student.getRollNo()).setName(student.getName()); System.out.println("Étudiant : Numéro d'étudiant " + student.getRollNo() +", mis à jour dans la base de données"); } }

Étape 4

UtilisationStudentDaopour démontrer l'utilisation du patron d'accès aux données.

DaoPatternDemo.java

public class DaoPatternDemo { public static void main(String[] args) { StudentDao studentDao = new StudentDaoImpl(); //Afficher tous les étudiants for (Student student : studentDao.getAllStudents()) { System.out.println("Étudiant : [RollNo : " +student.getRollNo()+", Nom : "+student.getName()+" ]"); } //Mettre à jour l'étudiant Student student =studentDao.getAllStudents().get(0); student.setName("Michael"); studentDao.updateStudent(student); //Obtenir l'étudiant studentDao.getStudent(0); System.out.println("Étudiant : [RollNo : " +student.getRollNo()+", Nom : "+student.getName()+" ]"); } }

Étape 5

Exécutez le programme et affichez le résultat :

Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]
autres extensions