En mi aplicación Spring MVC estoy usando DTO en la capa de presentación para encapsular el modelo de dominio en la capa de servicio. Los DTO se usan como objetos de respaldo de forma de resorte.Spring MVC: ¿Debería la capa de servicio regresar a los DTO específicos de operación?
por lo tanto, mis servicios ser algo como esto:
userService.storeUser(NewUserRequestDTO req);
La capa de servicio se traducirá DTO -> objeto Dominio y haga el resto del trabajo.
Ahora mi problema es que cuando quiero recuperar un DTO del servicio para realizar, por ejemplo, una Actualización o una Pantalla, parece que no puedo encontrar una mejor manera de hacerlo que tener múltiples métodos para la búsqueda que devuelven diferentes DTO es como ...
EditUserRequestDTO userService.loadUserForEdit(int id);
DisplayUserDTO userService.loadUserForDisplay(int id);
pero algo no se siente bien acerca de este enfoque. Quizás el servicio no debería devolver cosas como EditUserRequestDTO y el controlador debería ser responsable de ensamblar un requestDTO desde un objeto de formulario dedicado y viceversa. El motivo por el que DTO es diferente es que DisplayUserDTO está fuertemente tipeado para ser de solo lectura y también hay muchas propiedades del usuario que son entidades de una tabla de búsqueda en el DB (como ciudad y estado) para que DisplayUserDTO tenga el descripción de cadena de las propiedades, mientras que EditUserRequestDTO tendrá los identificadores que respaldarán las listas desplegables de selección en los formularios.
¿Qué opinas?
gracias
Gracias por la respuesta. Si usa el objeto de dominio para una operación de edición, ¿también usa el objeto de dominio para una nueva operación y todo lo demás, por qué solo para una edición? En mi caso estoy atrapado con un objeto de dominio anémico, no puedo hacer nada al respecto. El motivo de los DTO es que mis objetos de dominio son complejos con muchas relaciones y propiedades que no necesito para mis vistas. – arrages
ver mis comentarios arriba ... – GMK
Gracias GMK, La razón por la que estaba pensando en hacer esto no es porque es más ligero en el sistema. Creo que hay una razón legítima para lo que quiero hacer. Es cierto que no tengo que usar nada que no necesite del objeto de dominio, pero usar el objeto para obtener lo que necesito puede ser difícil a veces, también hay un problema de seguridad ya que la vista tendría acceso a campos que no debería tener, y bloquear el objeto es probablemente el mismo problema. – arrages