Capa de servicio vs DAO - ¿Por qué ambas cosas?

58

He estado trabajando con SpringMVC, Hibernate y algunas bases de datos en un ejemplo de aplicación web en java.

Hay algunos diferentes que hacen esto, pero este Spring 3 y el tutorial de integración de hibernación con ejemplo tiene una clase modelo, una vista (en jsp) y un servicio y clases de dao para el controlador.

Mi pregunta es, ¿no hacen lo mismo el servicio y las clases de DAO? ¿Por qué los necesitarías a ambos?

Este fue el tutorial que estaba usando: enlace

    
pregunta Jeff 10.12.2013 - 17:02

6 respuestas

57

En general, el DAO es lo más liviano posible y existe únicamente para proporcionar una conexión a la base de datos, a veces abstraído, por lo que se pueden utilizar diferentes backends de base de datos.

La capa de servicio está ahí para proporcionar lógica para operar con los datos enviados desde y hacia el DAO y el cliente. Muy a menudo, estas 2 piezas se agruparán en el mismo módulo y, ocasionalmente, en el mismo código, pero aún las verá como entidades lógicas distintas.

Otra razón es la seguridad: si proporciona una capa de servicio que no tiene relación con la base de datos, entonces es más difícil obtener acceso a la base de datos desde el cliente, excepto a través del servicio. Si no se puede acceder directamente a la base de datos desde el cliente (y no hay un módulo DAO trivial que actúe como servicio), entonces todo lo que un atacante que ha tomado sobre el cliente puede hacer es intentar piratear la capa de servicio también antes de que obtenga todo menos el El acceso más higiénico a sus datos.

    
respondido por el gbjbaanb 10.12.2013 - 17:54
35

Soy el escritor de la publicación en cuestión. Tengo mi parte justa de trabajar en diferentes tecnologías y diferentes arquitecturas. En base a lo anterior, puedo decir con seguridad que tener una capa de servicio y una capa dao siempre es una buena idea. DAO debe limitarse a solo agregar / actualizar / insertar / seleccionar objetos de Entidad en / desde la base de datos y eso es todo. Si desea hacer algo adicional en términos de lógica, agréguelo a la capa de servicio. Esto ayudará a hacer que el código sea modular y fácilmente reemplazable cuando se reemplaza la base de datos (para alguna parte de los datos). Esto es especialmente aplicable en aplicaciones que involucran informes que tienen lógicas pesadas incluso después de obtener datos de la base de datos.

Además, en primavera, la seguridad se aplica idealmente a la capa de servicio. No te gustaría cambiar de esta manera.

    
respondido por el lokesh 11.12.2013 - 06:08
10

Adam Bien señala en su libro el hecho de que JPA EntityManager es una buena implementación universal de la DAO:

enlace

En el mundo Java EE casi nunca hay necesidad de escribir su propio DAO porque las implementaciones de JPA incluyen uno. Solo tienes que escribir la capa de servicio.

La implementación de su propia capa DAO es realmente una resaca de la muy pobre arquitectura J2EE de hace 15 años, pero muchas personas todavía se sienten obligadas a hacerlo. Estas capas DAO personalizadas a menudo no proporcionan nada más que funciones de reenvío que llaman al método correspondiente en EntityManager.

Entonces, para responder a su pregunta, sí, necesita una capa de servicio y un DAO, pero solo tiene que escribir la capa de servicio.

    
respondido por el Dean Schulze 11.12.2013 - 16:09
3

Por lo general, coloco todo el código específico de db (consultas) en DAO y el manejo de transacciones y la lógica empresarial en los servicios. Esto permite que los métodos de servicio invocen métodos a través de múltiples dao y los mantengan todos dentro de la misma transacción. En mi opinión, esto permite una mejor reutilización del código en dao's.

    
respondido por el sbrattla 11.12.2013 - 10:12
2

He encontrado que la capa de servicio agrega complejidad innecesaria en la mayoría de los casos. En teoría, es evitar tener lógica empresarial en la capa dao, pero al final esto solo genera confusión, incluso algunas personas no han usado para eliminar completamente la capa dao, ya que creen que no agrega valor. enlace

Pero si tiene varias lógicas de negocios, entonces sí, es una buena idea. ¿Qué tan esencial es hacer una capa de servicio?

    
respondido por el Jesus 10.12.2013 - 17:33
-1

En mi humilde opinión, la capa de servicio se puede considerar como una capa entre el controlador y la capa DAO. Esta capa de servicio es exactamente donde podemos agregar lógica de negocios e incluso crear un objeto de retorno específico para lo que la vista debe representar.

    
respondido por el compserve23 04.10.2018 - 16:17

Lea otras preguntas en las etiquetas