Hibernate - Camadas separadas, qual melhor forma de fazer isso?

Estou com um duvida, vou usar uma camada de Hibernate, separada da parte web, qual seria o melhor manerira de usar os campos nas telas, um VO ou as classes do projeto Hibernate?

1 curtida

Para transferir dados entre camadas, geralmente usa-se DTO’s.

1 curtida

Estes DTOs seriam iguais as entidades e receberiam os valores? ou tem outra maneira de implementar?

Não necessariamente tenha que ser uma cópia da entidade, as vezes eles são compostos por campos de várias entidades o legal nesses casos é ter um pattern para realizar o trabalho sujo(converter as entidades para DTO’s), no meu caso eu uso uma camada assembler que realiza esse trabalho(faz a conversão de entidades para DTO), outro detalhe é que meus DTO’s são imutáveis ou seja, eles não tem métodos set, o valor recebido da view é o real valor que chega no servidor.

Alguns desenvolvedores fazem também a conversão de DTO para entidade, ou seja, realizando o mesmo processo mas agora do lado contrário, que vejo não sendo um bom design de software, criar um converter de DTO por entidade nem sempre há equivalência, a ideia de jogar um DTO para a tela ao invés da própria entidade é exatamente ter flexibilidade, ter tipos diferentes e até mesmo estruturas diferentes, então quando criamos um converter aumentamos o acoplamento entre as classes, para esses casos uso os set’s das entidades para receber o valor dos DTO’s, mas claro, cada um implementa como desejar sua aplicação, abraços.

1 curtida

Então eu só uso os campos que eu preciso,teria um exemplo de implementação?, no meu projeto estou deixando a parte
hibernate separado, pois mais tarde vou ter aplicativo mobile.

Vamos supor que você vá implementar uma consulta que retorna os dados de uma pessoa e do endereço dela. No mapeamento do banco, por exemplo, você terá uma classe pessoa e uma endereço para representar as tabelas do banco, e a relação entre essas tabelas é um-pra-um.

Ao apresentar na tela os dados de uma pessoa, você pode ter um DTO que já contemple todos os dados juntos, sem distição entre pessoa e endereço, assim:

public class DadosConsultaPessoaDTO {
    private String idPessoa;
    private String nomePessoa;
    private String logradouro;
    private String cep;
    // etc.
}

É um simples exemplo apenas para demonstra a ideia.

1 curtida

Entendi…