He estado trabajando con SpringMVC, Hibernate y algunas bases de datos en un ejemplo de aplicación web java.
Hay algunos diferentes que hacen esto, pero este tutorial de integración de Spring 3 e hibernación, por ejemplo, tiene una clase de modelo, vista (en jsp) y un servicio y clases de dao para el controlador.
Mi pregunta es, ¿tanto el servicio como las clases DAO hacen lo mismo? ¿Por qué los necesitarías a ambos?
Este fue el tutorial que estaba usando: http://fruzenshtein.com/spring-mvc-security-mysql-hibernate/
Soy el escritor del post en cuestión. Tengo mi parte justa de trabajar en diferentes tecnologías y arquitecturas diferentes. Basado en lo anterior, puedo decir con seguridad que tener una capa de servicio y una capa de 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 en la capa de servicio. No te gustaría cambiar de esta manera.
fuente
Adam Bien señala en su libro que JPA EntityManager es una buena implementación universal del DAO:
http://realworldpatterns.com/
En el mundo de Java EE casi nunca es necesario escribir su propio DAO porque las implementaciones de JPA incluyen uno. Solo tiene que escribir la capa de servicio.
La implementación de su propia capa DAO es realmente una resaca de la arquitectura J2EE muy pobre de hace 15 años, pero muchas personas todavía se sienten obligadas a hacerlo. Estas capas DAO personalizadas a menudo 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.
fuente
Normalmente pongo todos los códigos específicos de db (consultas) en los DAO y el manejo de transacciones y la lógica empresarial en los servicios. Esto permite que los métodos de servicio invoquen métodos en múltiples dao y lo mantengan todo dentro de la misma transacción. En mi opinión, esto permite una mejor reutilización del código en Dao.
fuente
He descubierto que la capa de servicio agrega complejidad innecesaria en la mayoría de los casos. En teoría es evitar tener lógica de negocios en la capa de dao, pero al final esto solo lleva a la confusión, incluso algunas personas no han utilizado para eliminar completamente la capa de dao, ya que sienten que no agrega valor. http://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer
Pero si tiene múltiples lógicas comerciales, entonces sí. Es una buena idea. ¿Qué tan esencial es hacer una capa de servicio?
fuente
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 empresarial e incluso crear un objeto de retorno específico para lo que la vista debe representar.
fuente