Bom dia Pessoal,
Alguém sabe a diferença entre os dois ou não há nenhuma diferença ?
Att
Bom dia Pessoal,
Alguém sabe a diferença entre os dois ou não há nenhuma diferença ?
Att
Olá Alan, tudo bem?
O DTO é utilizado para a transferência de dados entre camadas. Por exemplo, podemos ter um DTO que pega os dados de um formulário de cadastro (Camada de interface do usuário) e transporta os dados para um Controller (camada de aplicação).
Já o VO é um objeto que tem um valor na aplicação. Ele pertence a camada de domínio. Ele é um dado importante para o domínio, porém que não precisa de um identificador, sua identidade está no seu valor.
Um exemplo de VO é a String
. Ela é um valor imutável que é identificado pelo seu valor. Porém podemos pensar em outros tipos de VO, como Endereco
, Nome
, Documento
, Cartao
, entre outros.
Por exemplo um DTO pode deve ter get e set ?
Consegue algum outro exemplo de VO ? Não consegui compreender
Opa Alan,
Sim, sim, um DTO pode ter getters e setters. Da mesma forma que um VO.
A função de um VO é ser um objeto de valor para a sua aplicação. Por exemplo, uma String
. Ela tem um valor, o valor do texto que ela guarda. Quando queremos saber se uma String é igual a outra, comparamos o seu texto.
Vamos supor que temos a classe Cliente
, que possui nome, sobrenome, e endereço, além de um id:
public class Cliente {
private Integer id;
private String nome;
private String sobrenome;
private String endereco;
public Cliente(String nome, String sobrenome, String endereco) {
this.nome = nome;
this.sobrenome = sobrenome;
this.endereco = endereco;
}
}
O endereço é uma informação importante para a aplicação. Mas da maneira que definimos ele na classe passamos a ter alguns problemas.
Qual o jeito correto de salvar um endereço? Como saber se um endereço é igual a outro? Esse endereço vai só o nome da rua? Ou podemos colocar também o número, o CEP e assim por diante?
O que podemos fazer então é pegar esse atributo e criar uma classe para representar esse objeto.
public class Endereco {
private String rua;
private Integer numero;
private String cep;
public Endereco(String rua, Integer numero, String cep) {
this.rua = rua;
this.numero = numero;
this.cep = cep;
}
}
Dessa forma, na nossa classe Cliente
usamos a classe Endereco
:
public class Cliente {
private Integer id;
private String nome;
private String sobrenome;
private Endereco endereco;
public Cliente(String nome, String sobrenome, Endereco endereco) {
this.nome = nome;
this.sobrenome = sobrenome;
this.endereco = endereco;
}
}
O VO pode ter getters e setters, mas também pode ter outros métodos:
public class Endereco {
private String rua;
private Integer numero;
private String cep;
public Endereco(String rua, Integer numero, String cep) {
this.rua = rua;
this.numero = numero;
this.cep = cep;
}
public String getRua() {
return rua;
}
public Integer getNumero() {
return numero;
}
public String getCep() {
return cep;
}
public Stirng enderecoCompleto() {
return rua + ", " + numero + " - " + cep;
}
}
O VO pode ser imutável, muitas pessoas até dizem que ele deve ser imutável. Contudo, podemos sim ter métodos que alteram os atributos de um VO.