java - tres - ¿Cuál es la diferencia entre la capa de servicio y la capa modelo de dominio?
patron n capas (3)
El modelo de dominio contiene información y funcionalidad relacionada con lo que significa ser un usuario. Debe mapearse conceptualmente sobre algo que existe físicamente en el mundo real o un concepto claramente definido en el espacio del problema.
El Servicio contiene información y funcionalidad relacionada con la realización de unidades atómicas de trabajo. Debe asignarse conceptualmente a las tareas que se realizan en o por los miembros del modelo de dominio. Una sola tarea atómica realizada al hacer clic en un botón en la aplicación generalmente involucra a muchos miembros del Dominio trabajando juntos, a menos que su aplicación sea solo un archivador electrónico CRUD-y.
por ejemplo, tengo una tabla de usuarios, para ser capas, creo tales POJOs:
UserEntity.java
UserDao.java
UserBO.java (objeto de negocio, modelo de dominio?)
UserService.java (para la capa de servicio)
¿Cuál es la diferencia entre UserBO.java y UserService.java? ¿Por qué lo separamos a dos objetos?
Entidad: algo que se asigna a algún tipo de entidad (= objeto de interés) en el dominio del problema. En algunos casos (DDD) hay modelos de dominio enriquecidos donde las entidades tienen métodos que pueden manipular el estado del modelo. El enfoque más conservador es hacerlos anémicos (no hay métodos, excepto los captadores y definidores). Normalmente, una clase de Entidad termina siendo asignada a una tabla de base de datos.
BO: Supongo que esto es algún tipo de objeto de transferencia de datos. Algunas personas se preocupan mucho por restringir el acceso a las entidades solo a una parte limitada de la aplicación, y les gusta copiar los datos de las entidades en DTO. Por lo tanto, un servicio puede recibir una entidad de un DAO, luego copiarlo en un DTO y ese DTO es lo que recibiría la persona que llama al servicio.
Un objeto de acceso a datos proporciona una forma de consultar o actualizar datos, podría tener métodos de consulta que devolverían una entidad o colección de entidades. Los DAO generalmente no definen transacciones de base de datos, permiten que el servicio haga eso.
Un Servicio es algo que realiza alguna tarea, por ejemplo, los diferentes casos de uso generalmente no se desglosan limpiamente a lo largo de las líneas de entidad. Además, los servicios generalmente implican dependencias que las entidades intentan evitar (porque el modelo de dominio se trata de modelar el estado y los cambios de estado, y las dependencias son de infraestructura). Un servicio puede tener métodos que implementan casos de uso para algunos usuarios, donde cada método es transaccional.
Tal vez un nivel demasiado alto de visión general, pero aquí es cómo me he acercado a las capas antes, está bastante en línea con su arquitectura tradicional de N niveles.
La interfaz web entre el navegador del usuario y su capa de servicio, convierte los parámetros HTTP en datos que su capa de servicio necesitaría.
--- Utilice Business Objects para comunicarse entre estas capas ---
Servicio: interfaz entre su capa Web y su capa DAO, nada específico a los protocolos de transmisión aquí, es decir, no hay solicitudes / parámetros HTTP, Business Objects en su caso. Toda la lógica de tu negocio reside aquí. Por ejemplo, si su capa web dice "conceder permiso 1 al usuario 1234", su capa de servicio convertiría el permiso uno a LEER y el usuario 1234 a la entidad de usuario que la respalda en la base de datos.
--- Usar Entidades para comunicarse entre estas capas ---
DAO: la interfaz entre la capa de servicio y el mecanismo de persistencia real debe ser lo más tonto posible, lo que significa que si se espera que el objeto "comprar" tenga un objeto "usuario", se le debe dar a la DAO, no debe tratar con buscar al usuario, por ejemplo.
El uso de esta separación entre capas facilita la prueba unitaria y el mantenimiento de cada capa independientemente de las demás. Para elaborar sobre los BO''s, el mayor beneficio de aquellos es que al obtener datos de la interfaz de usuario a la capa de servicio encapsulados en un solo objeto y deja de buscar entradas de base de datos reales a la capa de servicio. Espero eso ayude.