Bom dia Pessoal,
Alguém sabe a diferença entre os dois ou não há nenhuma diferença ?
Att
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.