Olá, ainda sobre DDD…
Segundo o exemplo abaixo, onde tem-se um objeto “Perfil”, e “Avaliacao” representa um voto de um usuário acerca de um perfil, pode-se entender “Avaliacao” como sendo um VO? E este seria um membro do aggregate “Perfil” ?
public class Perfil extends EntidadeBase implements java.io.Serializable {
private Categoria categoria;
private Imagem imagem;
private String nome;
private Set<Avaliacao> avaliacoesDoPerfil = new HashSet<Avaliacao>(0);
public Perfil() {
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_perfis", unique = true, nullable = false)
public Integer obterId() {
return (Integer) this.id;
}
public void setarId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_categoria", nullable = false)
public Categoria obterCategoria() {
return this.categoria;
}
public void setCategorias(Categoria categoria) {
this.categoria = categoria;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_imagens", nullable = false)
public Imagem obterImagem() {
return this.imagem;
}
public void setarImagem(Imagem imagem) {
this.imagem = imagem;
}
@Column(name = "nome", length = 150)
public String obterNome() {
return this.nome;
}
public void setarNome(String nome) {
this.nome = nome;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "perfis")
public Set<Avaliacao> obterAvaliacoesDoPerfil() {
return this.avaliacoesDoPerfil;
}
public void setarAvaliacoesDoPerfil(Set<Avaliacao> avaliacoesDoPerfil) {
this.avaliacoesDoPerfil = avaliacoesDoPerfil;
}
//Operações e detalhes ocultados...
}
public class Avaliacao extends EntidadeBase implements java.io.Serializable {
private Perfil perfil;
private Date dataAvaliacao;
private String host;
private float nota;
public Avaliacao() {
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_avaliacao", unique = true, nullable = false)
public Integer obterId() {
return (Integer) this.id;
}
public void setarId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_perfis", nullable = false)
public Perfil obterPerfilAvaliado() {
return this.perfil;
}
public void setarPerfilAvaliado(Perfil perfil) {
this.perfil = perfil;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "data_avaliacao", nullable = false, length = 0)
public Date obterDataAvaliacao() {
return this.dataAvaliacao;
}
public void setarDataAvaliacao(Date dataAvaliacao) {
this.dataAvaliacao = dataAvaliacao;
}
@Column(name = "host", nullable = false, length = 100)
public String obterHost() {
return this.host;
}
public void setarHost(String host) {
this.host = host;
}
@Column(name = "nota", nullable = false, precision = 12, scale = 0)
public float obterNota() {
return this.nota;
}
public void setarNota(float nota) {
this.nota = nota;
}
//Operações e detalhes ocultados...
}
Entendo que Avaliacao seria sim um VO, uma vez que um voto não se altera, apenas exclui ou insere…
O que vcs acham?
Obrigado pela atenção!