Patrón de objeto de acceso a datos

El patrón de objeto de acceso a datos o patrón DAO se utiliza para separar las operaciones o la API de acceso a datos de bajo nivel de los servicios comerciales de alto nivel. Los siguientes son los participantes en el patrón de objetos de acceso a datos.
 

Patrón de objeto de acceso a datos de diagrama UML

Ventajas

1. La ventaja de usar objetos de acceso a datos es la separación relativamente simple y rigurosa entre dos partes importantes de una aplicación que pueden pero no deben saber nada entre sí, y que se puede esperar que evolucionen con frecuencia e independientemente.

2. Si necesitamos cambiar el mecanismo de persistencia subyacente, solo tenemos que cambiar la capa DAO y no todos los lugares en la lógica del dominio desde donde se usa la capa DAO.

Desventajas 

1. Las desventajas potenciales de usar DAO son una abstracción con fugas, duplicación de código e inversión de abstracción.

Componentes de diseño

  • BusinessObject: BusinessObject representa el cliente de datos. Es el objeto que requiere acceso a la fuente de datos para obtener y almacenar datos. Un BusinessObject puede implementarse como un bean de sesión, un bean de entidad o algún otro objeto Java además de un servlet o bean auxiliar que accede a la fuente de datos.
  • DataAccessObject: DataAccessObject es el objeto principal de este patrón. DataAccessObject abstrae la implementación de acceso a datos subyacente para BusinessObject para permitir un acceso transparente a la fuente de datos.
  • DataSource: esto representa una implementación de fuente de datos. Una fuente de datos podría ser una base de datos como RDBMS, OODBMS, repositorio XML, sistema de archivos planos, etc. Una fuente de datos también puede ser otro servicio del sistema o algún tipo de repositorio.
  • TransferObject: Esto representa un Transfer Object utilizado como soporte de datos. El DataAccessObject puede usar un Transfer Object para devolver datos al cliente. El DataAccessObject también puede recibir los datos del cliente en un Transfer Object para actualizar los datos en la fuente de datos.

Ejemplo:

Java

// Java program to illustrate Data Access Object Pattern
 
// Importing required classes
import java.util.ArrayList;
import java.util.List;
 
// Class 1
// Helper class
class Developer {
 
    private String name;
    private int DeveloperId;
 
    // Constructor of Developer class
    Developer(String name, int DeveloperId)
    {
 
        // This keyword refers to current instance itself
        this.name = name;
        this.DeveloperId = DeveloperId;
    }
 
    // Method 1
    public String getName() { return name; }
 
    // Method 2
    public void setName(String name) { this.name = name; }
 
    // Method 3
    public int getDeveloperId() { return DeveloperId; }
 
    // Method 4
    public void setDeveloperId(int DeveloperId)
    {
        this.DeveloperId = DeveloperId;
    }
}
 
// Interface
interface DeveloperDao {
    public List<Developer> getAllDevelopers();
    public Developer getDeveloper(int DeveloperId);
    public void updateDeveloper(Developer Developer);
    public void deleteDeveloper(Developer Developer);
}
 
// Class 2
// Implementing above defined interface
class DeveloperDaoImpl implements DeveloperDao {
 
    List<Developer> Developers;
 
    // Method 1
    public DeveloperDaoImpl()
    {
        Developers = new ArrayList<Developer>();
        Developer Developer1 = new Developer("Kushagra", 0);
        Developer Developer2 = new Developer("Vikram", 1);
        Developers.add(Developer1);
        Developers.add(Developer2);
    }
 
    // Method 2
    @Override
    public void deleteDeveloper(Developer Developer)
    {
        Developers.remove(Developer.getDeveloperId());
        System.out.println("DeveloperId "
                           + Developer.getDeveloperId()
                           + ", deleted from database");
    }
 
    // Method 3
    @Override public List<Developer> getAllDevelopers()
    {
        return Developers;
    }
 
    // Method 4
    @Override public Developer getDeveloper(int DeveloperId)
    {
        return Developers.get(DeveloperId);
    }
 
    // Method 5
    @Override
    public void updateDeveloper(Developer Developer)
    {
        Developers.get(Developer.getDeveloperId())
            .setName(Developer.getName());
        System.out.println("DeveloperId "
                           + Developer.getDeveloperId()
                           + ", updated in the database");
    }
}
 
// Class 3
// DaoPatternDemo
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        DeveloperDao DeveloperDao = new DeveloperDaoImpl();
 
        for (Developer Developer :
             DeveloperDao.getAllDevelopers()) {
            System.out.println("DeveloperId : "
                               + Developer.getDeveloperId()
                               + ", Name : "
                               + Developer.getName());
        }
 
        Developer Developer
            = DeveloperDao.getAllDevelopers().get(0);
 
        Developer.setName("Lokesh");
        DeveloperDao.updateDeveloper(Developer);
 
        DeveloperDao.getDeveloper(0);
        System.out.println(
            "DeveloperId : " + Developer.getDeveloperId()
            + ", Name : " + Developer.getName());
    }
}
Producción

DeveloperId : 0, Name : Kushagra
DeveloperId : 1, Name : Vikram
DeveloperId 0, updated in the database
DeveloperId : 0, Name : Lokesh

Este artículo es una contribución de Saket Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *