Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

155
Visualizações
Objeto de transferencia de datos DTO Dónde construir

Intentando refactorizar algún código. Veo algunas clases que crean objetos DTO que se pasan en la capa de servicio y que @RestController los devuelve más tarde. Como sé, es mejor construir los objetos de transferencia de datos solo en los controladores y pasarlos a las vistas, especialmente cuando usamos algo como WrapperDTO<T> con valor get y set. Tal vez haya diferencias cuando construimos el WrapperDTO con objetos complejos o tipos de datos simples. Todas las opiniones serán bien recibidas.

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

DTO se puede utilizar para transferir datos entre las diferentes capas de una aplicación: DAO, Servicio, Fachada, Controlador. En mi experiencia, DTO es un tema obstinado.

En mi opinión, cuanto más tarde sea la conversión, mejor, es incluso mejor si no se necesita conversión. Generalmente, el último está en el límite de la aplicación. DTO no es gratuito, implica mapeo y su soporte. Por lo tanto, los DTO tendrán sentido cuando haya una discrepancia del modelo de dominio o una discrepancia técnica del modelo a través del límite. Para obtener más información, puede consultar el artículo de LocalDTO y el enlace asociado .

Si me concentro en el servicio -> fachada -> capas del controlador :

  • Servicios: Están haciendo cosas de servicios y pueden llamarse entre ellos para hacer su procesamiento. Si sus modelos de dominio siguen siendo coherentes en el límite de los servicios service => facade , es demasiado pronto para convertir el resultado en un DTO.

  • Fachadas: Pueden orquestar servicios y convertir entrada/salida. En mi punto de vista, será el lugar adecuado para convertir hacia o desde DTO. Pero solo si es necesario, es decir. porque sus modelos de dominio deben transformarse a través de este límite (campos de filtrado, agregación...)

  • Puerta de enlace/Controladores: Están en el límite de la aplicación. Sus lógicas son simples, reducidas a la lógica de los límites. La relación entre una fachada y un controlador suele ser one <-> one . ***

    La fusión de fachadas y controladores suele tener sentido


Por lo tanto, en mi punto de vista, su primera propuesta es más adecuada, por ejemplo. UserController.... . Lo más importante es ser pragmático.

about 4 years ago · Santiago Trujillo Relatório

0

Diría que es mejor crear DTO en la capa de Servicio.

El controlador no debe conocer los detalles de la lógica empresarial. Por ejemplo, necesitamos devolver la información del usuario, pero algunos campos (contraseña, etc.) deben excluirse. Los campos existen en la entidad Usuario, pero deben eliminarse de DTO.

En otro caso, obtuvimos SomePaginationDTO en el controlador y aún necesitamos pasar el DTO al servicio para analizar el filtro, aplicar la ordenación, limitar los resultados, etc. Toda la lógica es parte de la responsabilidad del servicio. Entonces pasaría SomePaginationDTO al servicio.

about 4 years ago · Santiago Trujillo Relatório

0

Yo diría que no hay una forma canónicamente correcta de hacer esto. Depende de para qué se use DTO.

Encontré una regla simple para mí sobre dónde usar DTO en el nivel de servicio y dónde no: en caso de que el nivel de servicio tenga solo un cliente, uso DTO en todo el nivel de servicio. En caso de que haya dos o más clientes, es mejor no usar DTO en el nivel de servicio.

Permítanme explicar esto con más detalles:

Básicamente, está claro que no incluir DTO en el nivel de servicio requiere más esfuerzos. Entonces, en caso de que solo haya un cliente, mantendría las cosas simples y usaría DTO como un tipo de retorno para los métodos de servicio.

En caso de que haya más de un cliente del servicio, lo más probable es que los clientes requieran un DTO diferente (por ejemplo, quiero tener una representación json y csv de un objeto). En tal caso, no devolveré a DTO del servicio. De lo contrario, necesitaría tener diferentes servicios para cada DTO, o diferentes métodos de servicio, etc.

Nota: no estoy diciendo que si no usa DTO en el nivel de servicio, debe mover la lógica de transformación al nivel del controlador. Sigo pensando que el nivel del controlador debe ser lo más simple posible. Es posible que tenga algún nivel de transformación intermedio entre el controlador y el servicio, incómodo, pero es mucho mejor que tener varios servicios.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda