Estive tentando criar um fluxo para um aplicativo Web em camadas básico e estava lendo informações conflitantes online. O que estou tentando descobrir é se ainda há uma vantagem de ainda usar objetos DTO da camada DAO para Service através do uso de algum tipo de mapeador.
O fluxo básico que eu prevejo é o seguinte:
- Modelo / formulário de interface do usuário -> Controlador
- O controlador converte o modelo em objeto de domínio (entidade)
- Objeto de Domínio -> Camada de Serviço
- Objeto de domínio -> DAO
- DAO -> Objeto (s) de Domínio
- Serviço -> UI
- A interface do usuário converte o domínio em modelos de interface do usuário
Se o DTO foi seguido, o DAO retornaria um DTO e não a Entidade. Depois de fazer algumas leituras, parece que o DTO se tornou um pouco extinto, pois (pelo menos em Java) as entidades se tornaram POJOs anotadas, o que significa que sua pegada de memória se tornou muito pequena.
É esse o caso ou os DTOs devem ser usados para encapsular completamente os objetos de domínio na camada DAO e, se for o caso, o que a camada de serviço passaria para o DAO?
Muitíssimo obrigado!
Uma das razões pelas quais penso que essa discussão surge repetidamente é porque parece um grande problema pegar um objeto com todos os dados necessários e convertê-lo em um objeto que pareça idêntico ou quase idêntico àquele você está entregando.
É verdade, é uma PITA. Mas existem algumas razões (além das enumeradas acima) para fazer isso.
Mas, você pode gerenciá-lo com bastante eficiência se encapsular a lógica de conversão em uma coleção de classes de conversor
Dê uma olhada no lambdaJ, onde você pode 'converter (domainObj, toDto)'; há uma sobrecarga disso para uso em coleções. Aqui está um exemplo de um método de controlador que faz uso dele. Como você pode ver, não parece tão ruim.
fonte