Pergunta

Na camada de domínio ou na camada de acesso a dados?

Foi útil?

Solução

A principal motivação para os DTOs é apresentar uma interface adaptada a outra camada (normalmente, a camada de apresentação). Por exemplo, uma tela de entrada de dados pode precisar de alguns bits de dados de um objeto de usuário, além de alguns bits de um pedido, etc. Nesse caso, o domínio para o DTO deve acontecer na camada que a camada de apresentação chama, ou seja, tipicamente uma camada de "serviço".

Existem bibliotecas como Escavilha lá fora, que automatizam o trabalho grunhido de conversão entre modelos de domínio e DTOs.

A chave principal é que os DTOs destinam -se a abstrair os dados (não a lógica de negócios) de objetos de modelo de domínio mais ricos - portanto, os DTOs devem ser convertidos de volta aos objetos de domínio o mais cedo possível (na camada de serviço) para que o restante de suas camadas de aplicação Pode funcionar com objetos de domínio mais ricos (dados e lógica de negócios)

Outras dicas

Não sou muito fã de DTOs, mas digo que não faça isso na camada de dados. A camada de dados lida com objetos modelo e sua persistência. Por que acoplá -lo com outras camadas trazendo DTOs para ele? Eu os mapeia em outro lugar, provavelmente entre o serviço e as camadas da interface do usuário, apenas no ponto em que eles atravessam o limite entre onde são criados e onde são usados.

Colocando isso no contexto do MVC, se você tiver controladores e serviços, deve colocá -lo no controlador. Isso tornaria um DTO mais perto da camada de visualização e permitiria que a camada de serviço brinque apenas com objetos de domínio, evitando uma possível confusão com outros modelos.

O DTO em si é na verdade o modelo MVC (explicado aqui: https://stackoverflow.com/a/1058186).

Abaixo está um tutorial recomendado que purê o controlador, a camada de serviço e os conceitos DTO (em Java usando a estrutura da primavera, mas o conceito também é claro para outras plataformas):https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-Application

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top