practices datos data capa best acceso data-access-layer

data-access-layer - datos - data access layer c# best practices



¿Cuál es la diferencia entre una "Capa de servicio de datos" y una "Capa de acceso a datos"? (4)

Recuerdo haber leído que uno abstrae las llamadas de bajo nivel en un marco independiente de datos (por ejemplo, métodos ExecuteCommand, etc.) y el otro generalmente contiene métodos específicos de negocios (por ejemplo, UpdateCustomer).

¿Es esto correcto? ¿Cual es cual?


Creo que, en general, los dos términos son intercambiables, pero podrían tener significados más específicos dependiendo del contexto de su entorno de desarrollo.

Una capa de acceso a datos se encuentra en el límite entre los datos y la aplicación. Los "datos" son simplemente el conjunto diverso de fuentes de datos utilizados por la aplicación. Esto puede significar que se debe hacer una codificación sustancial en cada aplicación para juntar datos de múltiples fuentes. El código que crea las vistas de datos requeridas será redundante en algunas aplicaciones.

A medida que la cantidad de fuentes de datos crece y se vuelve más compleja, es necesario aislar varias tareas de acceso a los datos para abordar los detalles del acceso, la transformación y la integración de los datos. Con servicios de datos bien diseñados, los Servicios Comerciales podrán interactuar con datos a un nivel más alto de abstracción. La lógica de datos que maneja el acceso a los datos, la integración, la resolución semántica, la transformación y la reestructuración para abordar las vistas de datos y las estructuras que necesitan las aplicaciones se encapsula mejor en la capa de servicios de datos.

Es posible romper aún más la capa de servicios de datos en sus partes constituyentes (es decir, acceso a datos, transformación e integración). En tal caso, podría tener una "Capa de acceso a datos" que solo se ocupa de recuperar datos, y una "Capa de servicio de datos" que recupera sus datos a través de la Capa de acceso a datos y combina y transforma los datos recuperados en los diversos objetos requeridos por la capa de servicio empresarial.


Para mí, esta es una decisión de diseño personal sobre cómo desea manejar el diseño de su proyecto. A veces, el acceso a datos y el servicio de datos son uno y el mismo. Para .NET y LINQ ese es el caso.

Para mí, la capa de servicio de datos es lo que realmente hace la llamada a la base de datos. La capa de acceso a datos recibe los objetos y los crea o los modifica para que la capa de servicio de datos realice la llamada a la base de datos.

En mis diseños, Business Logic Layer manipula los objetos según las reglas comerciales, los pasa a la capa de acceso a datos que los formateará para acceder a la base de datos o los objetos de la base de datos, y la capa de servicio de datos maneja la llamada real de la base de datos .


El concepto de capa de servicio de datos hecho en la documentación de WebSphere Commerce es sencillo:

La capa de servicio de datos (DSL) proporciona una capa de abstracción para el acceso a datos que es independiente del esquema físico. El objetivo de la capa del servicio de datos es proporcionar una interfaz coherente (llamada fachada del servicio de datos) para acceder a los datos, independientemente del marco de correlación objeto-relación.

Actualmente, en Internet, el concepto de DSL se asocia principalmente con las arquitecturas orientadas a servicios (SOA), pero no solo. Aquí se menciona en un ejemplo de aplicaciones N-tier.


¡Aquí hay otra perspectiva profunda de las trincheras! Una capa de acceso a los datos es una capa de abstracción de software que oculta la complejidad / implementación de la obtención de los datos. Las aplicaciones piden a la capa de acceso a los datos (ver el patrón de diseño DAO) "obtener esto" o "actualizar eso", etc. (direccionamiento indirecto). La capa de acceso a datos es responsable de realizar operaciones específicas de la implementación, como leer / actualizar varias fuentes de datos, como Oracle, MySQL, Cassandra, RabbitMQ, Redis, un sistema de archivos simple, un caché o incluso delegar en otra capa de servicio de datos. .

Si todo este trabajo ocurre dentro de una sola máquina y en la misma aplicación, el término Capa de servicio de datos es equivalente a una Fachada de servicio (direccionamiento indirecto). Es responsable de dar servicio y delegar las llamadas a la aplicación a la capa de acceso a datos correcta.

De manera algo confusa, en un mundo de informática distribuida o Arquitectura Orientada a Servicios, una Capa de Servicio de Datos puede ser realmente un servicio web que actúa como una aplicación independiente. En este contexto, la capa de servicio de datos delega las solicitudes de datos de aplicaciones en sentido ascendente recibidas en la capa de acceso a datos correcta. En esta instancia, los servicios web son acceso indirecto a los datos de las aplicaciones; la aplicación solo necesita saber a qué servicio llamar para obtener los datos, por lo que, como regla general, en entornos informáticos distribuidos, este enfoque reducirá la complejidad de la aplicación (y siempre hay casos excepcionales)

Entonces, para ser claros, la aplicación usa una DSL y una DAL. El DSL en la aplicación debe hablar con un DAL en la misma aplicación. DAL tiene la opción de utilizar un solo origen de datos o delegar en otro servicio web. Servicio web DSL puede delegar el trabajo al DAL para esa solicitud. De hecho, es posible que una sola solicitud de servicio web use varias fuentes de datos para responder a los datos.

Con todo lo dicho, desde un punto de vista pragmático, solo cuando los sistemas se vuelven cada vez más complejos, se debería prestar más atención a los patrones arquitectónicos. Es una buena práctica hacer las cosas bien, pero no tiene sentido doblar innecesariamente tu trabajo. ¿Recuerdas a YAGNI? ¡Bien, eso no resuena cuando llega el momento!

Para concluir: Un famoso aforismo de David Wheeler dice: "Todos los problemas en la informática pueden resolverse con otro nivel de indirección"; [1] a menudo se cita deliberadamente erróneamente con "nivel de abstracción" sustituido por "nivel de indirección". El corolario de Kevlin Henney es "... excepto por el problema de demasiadas capas de indirección".