Estoy trabajando en la aplicación RCP, soy nuevo en esta aplicación.
Los beans de primavera se utilizan para escribir lógica de negocios para guardar / recuperar entidades.
Pero, en lugar de enviar entidades directamente al cliente , estamos convirtiendo a DTO y completando el cliente. Mientras guardamos, nuevamente estamos convirtiendo DTO en entidad y guardando.
¿Cuál es el beneficio de estas conversiones? Alguien puede explicar?

What's the benefit of these conversions?desacoplar el modelo de datos de persistencia del modelo de datos (representación) ofrecido a los consumidores. Los beneficios del desacoplamiento se han discutido ampliamente en SE. Sin embargo, el objetivo debajo de los DTO es reunir en una sola respuesta tanta información como se considere necesaria para que los clientes guarden llamadas al servidor. Lo que hace que la comunicación cliente-servidor sea más fluida.Respuestas:
Cada vez que un desarrollador pregunta "¿cuál es el punto de hacer esto?", Lo que realmente quieren decir es "No veo ningún caso de uso en el que hacerlo proporcione un beneficio". Con ese fin, déjame mostrarte algunos ejemplos.
Todos los ejemplos se basarán en este modelo de datos simple:
Y puede suponer que la aplicación utiliza estos datos de muchas maneras diferentes (informes, formularios, ventanas emergentes, ...).
Toda la aplicación ya existe. Todo lo que menciono es un cambio en la base de código existente. Esto es importante para recordar.
Ejemplo 1 - Cambiar la estructura de datos subyacente - Sin DTO
Los requisitos han cambiado. La edad de la persona debe recuperarse dinámicamente de la base de datos del gobierno (supongamos que se basa en su nombre y apellido).
Como ya no necesita almacenar el
Agevalor localmente, por lo tanto, debe eliminarse de laPersonentidad. Aquí es importante darse cuenta de que la entidad representa los datos de la base de datos , y nada más. Si no está en la base de datos, no está en la entidad.Cuando recupera la antigüedad del servicio web del gobierno, se almacenará en un objeto diferente (o int).
Pero su interfaz aún muestra una edad. Todas las vistas se han configurado para usar la
Person.Agepropiedad, que ahora ya no existe. Se presenta un problema: todas las vistas que se refieren a laAgede una persona necesitan ser reparadas .Ejemplo 2 - Cambiar la estructura de datos subyacente - Con DTO
En el antiguo sistema, también hay
PersonDTOentidades con los mismos cinco propiedades:Id, FirstName, LastName, Age, CityId. Después de recuperar aPerson, la capa de servicio lo convierte en ayPersonDTOluego lo devuelve.Pero ahora, los requisitos han cambiado. La edad de la persona debe recuperarse dinámicamente de la base de datos del gobierno (supongamos que se basa en su nombre y apellido).
Como ya no necesita almacenar el
Agevalor localmente, por lo tanto, debe eliminarse de laPersonentidad. Aquí es importante darse cuenta de que la entidad representa los datos de la base de datos , y nada más. Si no está en la base de datos, no está en la entidad.Sin embargo, dado que tiene un intermediario
PersonDTO, es importante ver que esta clase pueda conservar laAgepropiedad. La capa de servicio buscaráPerson, la convertirá en aPersonDTO, luego también buscará la edad de la persona del servicio web del gobierno, almacenará ese valorPersonDTO.Agey pasará ese objeto.La parte importante aquí es que cualquiera que use la capa de servicio no ve una diferencia entre el sistema antiguo y el nuevo . Esto incluye su interfaz. En el sistema anterior, recibía un
PersonDTOobjeto completo . Y en el nuevo sistema, todavía recibe unPersonDTOobjeto completo . Las vistas no necesitan ser actualizadas .Esto es lo que queremos decir cuando usamos la frase separación de inquietudes : hay dos inquietudes diferentes (almacenar los datos en la base de datos, presentar los datos a la interfaz) y necesitan un tipo de datos diferente cada uno. Incluso si esos dos tipos de datos contienen los mismos datos en este momento, eso podría cambiar en el futuro.
En el ejemplo dado,
Agehay una diferencia entre los dos tipos de datos:Person(la entidad de la base de datos) no necesita unAge, peroPersonDTO(el tipo de datos frontend) sí lo necesita.Al separar las preocupaciones (= crear tipos de datos separados) desde el principio, la base de código es mucho más resistente a los cambios realizados en el modelo de datos.
Podría darte más ejemplos, pero el principio siempre será el mismo.
Para resumir
Person. Ej. )Name. Pero el hecho de que todos tengan unaNamepropiedad no significa que debamos hacer que hereden de unaEntityWithNameclase base compartida . Las diferentesNamepropiedades no tienen una relación significativa.Nameconsigue a llamarse aTitle, o una persona recibe unFirstNameeLastName), que se tendrá que invertir un mayor esfuerzo deshacer la herencia , que ni siquiera necesita en primer lugar .Como regla general para considerar las preocupaciones de separación, piense de esta manera:
Suponga que cada inquietud (la interfaz de usuario, la base de datos, la lógica) es manejada por una persona diferente en una ubicación diferente. Solo pueden comunicarse por correo electrónico.
En una base de código bien separada, un cambio a una preocupación particular solo deberá ser manejado por una persona:
Si todos estos desarrolladores estuvieran usando la misma
Personentidad, y se hiciera un cambio menor en la entidad, todos tendrían que participar en el proceso.Pero al usar clases de datos separadas para cada capa, ese problema no es tan frecuente:
PersonDTOobjeto válido , al desarrollador de negocios y de la interfaz de usuario no le importa que haya cambiado la forma en que se almacenan / recuperan los datos.La frase clave aquí es que no les afecta . La implementación de una buena separación de preocupaciones busca minimizar el afectar (y por lo tanto tener que involucrar) a otras partes.
Por supuesto, algunos cambios importantes no pueden evitar incluir a más de una persona, por ejemplo, cuando se agrega una entidad completamente nueva a la base de datos. Pero no subestimes la cantidad de cambios menores que tienes que hacer durante la vida útil de una aplicación. Los cambios importantes son una minoría numérica.
fuente