¿Cuál es la idea general para ayudar a decidir cuándo usar DTO y cuándo usar Entity en estos casos?Entidades JPA y/vs DTOs
- UI/server side java llamando a los servicios. ¿Debe obtener/enviar entidades o DTO?
- Servicio web llamando a los servicios. ¿Deberían los servicios aceptar entidades o DTO?
Me gusta leer el código que pasan entidades en torno a:
- más simple para pasar alrededor, no hay necesidad de mapa de dtos
- no necesita clases extra
- relaciones con otras entidades ya están definidos , así que no es necesario que se combinan en una sola dtos relacionados DTO
- solo POJOs
Pero existen argumentos sobre DTO que los mapas a una entidad son más seguros, porque es un contrato, y la entidad puede cambiar a cualquier forma, y la DTO se mantendrá igual. Por ejemplo, al igual que la entidad tiene un nombre de campo, y el DTO también tiene un nombre de campo. Más adelante, si el requisito cambia, la tabla de la base de datos cambia, la entidad también puede cambiar, cambiando el nombre a firstName y lastName. Pero el DTO todavía tendrá un nombre de campo, que es firstName + lastName.
Así que aquí está la lista de los pros de usar DTO:
- compatible desde el punto de código que acepta los dtos
Los contras de DTO que se me ocurre es la vista:
- tienen que definir las clases DTO y el mapeo (tal vez usando la hoja topadora)
- los programadores h Para analizar cuándo usar DTO y entidad, me refiero a pasar DTO por cada método es un desastre
- gastos generales de conversión de entidades a DTO y viceversa
- Todavía estoy inseguro sobre la relación de uno a muchos sobre cómo asignarlos En JPA podemos inicializar esto de forma lenta, pero al pasar en DTO, debería inicializar esto o no. En breve, los DTO no pueden tener proxies perezosos inicializados, solo contienen valores.
favor compartir pensamientos que ..
Gracias!
Estas son algunas citas de diferentes lugares
reutilización de la clase de entidad como un DTO parece desordenado. La API pública de la clase (incluidas las anotaciones en los métodos públicos ) ya no define claramente el objetivo del contrato que es presentando.La clase terminará con los métodos que solo son relevantes cuando la clase se está utilizando como DTO y algunos métodos que solo serán relavent cuando se use la clase como entidad. Las preocupaciones no serán separadas limpiamente y las cosas serán más estrechamente acopladas. Para mí eso es más importante consideración de diseño y luego intentar ahorrar en el número de archivos de clase creados.
Absolutamente NO !!!
Las entidades JPA se asignan a una base de datos, pero no están 'atadas' a una base de datos. Si la base de datos cambia, cambia las asignaciones, no los objetos. Los objetos siguen siendo los mismos. Ese es el punto completo !
¿Podría aclarar esta sección "Está asumiendo que sus servicios siempre serán llamados por un cliente Java"? Gracias por tu respuesta perspicaz. – bertie
¿Qué sucede si mis entidades no tienen lógica y son tan simples por defecto que solo tienen getter y setters, equals y los métodos básicos como, toString, equals, hash, clone, set ...? No hay problema en usarlos en un servicio web para otros idiomas. – djmj