2010-05-15 15 views

Respuesta

18

Mi comprensión es que una capa de acceso a datos no abstrae la base de datos, sino que crea una base de datos operaciones y creación de consultas más fácil.

Por ejemplo, las capas de acceso de datos por lo general tienen API muy similar a la sintaxis SQL que aún requieren el conocimiento de la estructura de la base de datos con el fin de escribir:

$Users->select('name,email,datejoined')->where('rank > 0')->limit(10); 

capas de abstracción de datos se suele completo soplado (Objeto-Relacional de ORM Mappers) que teóricamente evitan la necesidad de comprender cualquier estructura de base de datos subyacente o tienen algún conocimiento de SQL. La sintaxis podría ser algo como esto:

Factory::find('Users', 10)->filter('rank > 0'); 

y todos los objetos podría estar completamente llenos con todos los campos, posiblemente unidas con cualquier padre o los objetos secundarios si se establece esa manera.

Sin embargo, esta abstracción tiene un precio. Personalmente, considero que la doctrina o propulsión de ORM es innecesaria e ineficiente. En la mayoría de los casos, una simple capa de acceso a datos funcionará bien, con SQL manual para cualquier cosa que requiera atención especial, en lugar de tener que destruir el rendimiento de la aplicación para obtener azúcar sintáctico. Esta área es un debate muy acalorado, así que no voy a entrar en más.

Si se refería a los datos base capa de abstracción, entonces sería algo similar a PDO, por lo que su código se puede utilizar para un mayor número de proveedores de bases de datos. PDO funciona con MySQL, PostgreSQL y mysqli, entre otros, creo.

+0

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

29

Data Access = crear, leer, actualizar, eliminar (CRUD) operaciones específicas de su dominio de aplicación

de datos de capa de abstracción = realiza operaciones de bases de datos genéricos como conexiones, comandos, parámetros que aislantes de bibliotecas de datos específicos del fabricante y proporcionar una API de alto nivel para acceder a los datos independientemente de si utiliza MySQL, Microsoft SQL Server, Oracle, DB2, etc.

+2

Corto y dulce. Bien hecho. –

5

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.

Cuestiones relacionadas