De wiki:
Data Access Layer
una capa de acceso de datos (DAL) en el software de ordenador, es una capa de un programa equipo que proporciona acceso simplificado a los datos almacenados en almacenamiento persistente de algunos tipo, como una base de datos entidad-relacional .
Por ejemplo, el DAL puede devolver una referencia a un objeto (en términos de programación orientada a objetos) completa con sus atributos en su lugar de una fila de campos de una tabla de base de datos. Esto permite que los módulos del cliente (o usuario) se creen con un mayor nivel de abstracción. Este tipo de modelo podría implementarse mediante la creación de una clase de acceso a datos métodos que hacen referencia directamente a un conjunto correspondiente de procedimientos almacenados en la base de datos .Otra implementación podría potencialmente recuperar o escribir registros desde o hacia un sistema de archivos. El DAL oculta esta complejidad del almacén de datos subyacente del mundo externo.
Por ejemplo, en lugar de utilizar comandos como insertar, eliminar, y actualización para acceder a una tabla específica en una base de datos, una clase y unos procedimientos almacenados podría ser creado en la base de datos. Los procedimientos se llamarían desde un método dentro de la clase, que devolvería un objeto que contiene los valores solicitados. O bien, los comandos de actualización de inserción, eliminación y podrían ejecutarse dentro de funciones simples como registeruser o loginuser almacenados dentro de la capa de acceso a datos.
En pocas palabras, su CRUD básica funcionalidades lógicas/ en objetos de negocio para empujar a/tirar de la capa de persistencia/Almacenamiento cae aquí. Para la mayoría de los casos, es posible que desee solo esto. ORM mapping, interfaces de objetos comerciales de Model etc caen aquí.
Database Abstraction Layer
una capa de abstracción de base de datos es una interfaz de programación de aplicaciones que unifica la comunicación entre una aplicación de ordenador y bases de datos como SQL Server, DB2, MySQL, PostgreSQL, Oracle o SQLite. Tradicionalmente, todos los proveedores de bases de datos proporcionan su propia interfaz adaptada a sus productos, lo que deja al programador de aplicaciones implementar el código para todas las interfaces de base de datos que le gustaría admitir. Las capas de abstracción de la base de datos reducen la cantidad de trabajo proporcionando una API consistente para el desarrollador y ocultan los detalles de la base de datos detrás de esta interfaz tanto como sea posible. Existen muchas capas de abstracción con diferentes interfaces en numerosos lenguajes de programación.
Básicamente, es una capa adicional de abstracción para que CRUD contra los proveedores de interfaces independientes y preocuparse menos por detalles de implementación de diversos proveedores de bases de datos. Lo necesitará solo si desea admitir más de una base de datos. ORMs, Micro ORM, envoltorios, clases de controladores genéricos, cualquiera que sea el nombre, etc. que se ocupa del establecimiento de la conexión, el manejo de parámetros, la ejecución, etc., caí aquí. Es solo una capa adicional justo antes de la capa Persistance/Storage. En la terminología de 3 niveles, ambas capas se encuentran debajo de una, ya que no están lógicamente separadas.
Para resumir, DAL es sobre los datos, DbAL es sobre la base de datos. DAL define las operaciones, DbAL opera. DAL se encuentra detrás de DbAL que está justo detrás de Db real. DAL llama a DbAL. DAL es una buena idea para separar las lógicas de negocios (en Modelo) de las lógicas de CRUD, mientras que DbAL rara vez se necesita (pero me encanta). DAL es un mapeo de diseño de más alto nivel, DbAL es una arquitectura e implementación de más bajo nivel. Ambos separan responsabilidades. Los ORM son estructuras masivas que hacen las dos cosas por ti. No estoy seguro de cómo los separa al usar ORM. No es necesario ya que los ORM manejan todo eso por usted. Idealmente, de todos modos tendría DAL en un proyecto y DbAL en otro que simplemente llamaría capa de persistencia ya que no tiene sentido separar Db y las operaciones en él.
Estoy algo confundido por tu respuesta. ¿Puedes hacerlo un poco más simple?Pueden ser algunos ejemplos más que pueden ayudar. Estoy realmente confundido. – kamal