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?
Para transferir dados entre camadas, geralmente usa-se DTO’s.
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.
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.
Entendi…