ok, então esse ItemDePedido faz parte do aggregate onde o root é Pedido, e não é nem VO nem Entity? Eu pensava que em um modelo de domínio só teríamos esses dois tipos de objeto…
ok, vamos lá… pra ver se eu estou conseguindo entender:
Um objeto Menu, com os atributos id (por causa do BD), nome, descricao, imagem, url.
Tenho duas instâncias, com o mesmo nome, descrição, imagem e url. Digo que as duas instâncias representam o mesmo Menu, pois em meu contexto, não faz sentido dois menus apontando para o mesmo local…
Tenho então, neste caso, uma Entidade, certo? Pois a url garante que o Menu seja único.
Posso ter duas instâncias de um objeto, com TODOS os atributos iguais e essas instâncias estarem representando indivíduos distintos?
SIM = esse objeto é um Entity.
NÃO = trata-se de um VO.
Pode-se perguntar de outra maneira:
Posso ter dois objetos (ou mais) cadastrados no sistema (BD) com todos os atributos iguais?
SIM = Deverá ser um entity.
NÃO = Deverá ser um VO.
Certo ou errado?
[quote=spinow]ok, vamos lá… pra ver se eu estou conseguindo entender:
Um objeto Menu, com os atributos id (por causa do BD), nome, descricao, imagem, url.
Tenho duas instâncias, com o mesmo nome, descrição, imagem e url. Digo que as duas instâncias representam o mesmo Menu, pois em meu contexto, não faz sentido dois menus apontando para o mesmo local…
Tenho então, neste caso, uma Entidade, certo? Pois a url garante que o Menu seja único.[/quote]
Não, o motivo pela qual ele é uma entidade é por que ele tem uma identidade, algo que o identifique e que o faça ser diferente de outros Menus. Por acaso essa url é a identidade dele.
Antes que diga que troquei seis por meia dúzia, digo que o conceito é importante.
[quote]Posso ter duas instâncias de um objeto, com TODOS os atributos iguais e essas instâncias estarem representando indivíduos distintos?
SIM = esse objeto é um Entity.
NÃO = trata-se de um VO.
[/quote]
A identidade de um objeto é a mesma do outro? Então eles são a mesma entidade.
O objetos não tem identidade? Então eles não são entidades.
[quote]
Pode-se perguntar de outra maneira:
Posso ter dois objetos (ou mais) cadastrados no sistema (BD) com todos os atributos iguais?
SIM = Deverá ser um entity.
NÃO = Deverá ser um VO.[/quote]
Se eles eles tiverem a mesma identidade, não pode.
Se eles não tiverem identidade, não importa qual você vai pegar. Pode, mas para quer ter dois se poder ter um?
Numa Entidade o identificador é um dos atributos do objeto e que por si só representa sua singularidade no domínio, ou falando mais fácil, o identifica. Portanto duas instancias com mesmo atributo são considerada iguais. Value Objects também possuem identificador, que é o mesmo que o conjunto de seus atributos.
Portanto a resposta para sua pergunta é não para ambos entidade e value objects.
[quote=spinow]
Pode-se perguntar de outra maneira:
Posso ter dois objetos (ou mais) cadastrados no sistema (BD) com todos os atributos iguais?
SIM = Deverá ser um entity.
NÃO = Deverá ser um VO.
Certo ou errado?[/quote]
Se estamos falando de DDD, então não existe o BD e o domínio É o “sistema”.
Uma dica importante pra implementar VOs é não se esquecer que os VOs devem possuir atributos (data) e quando aplicável comportamento (behavior). É comum vermos VOs anêmicos contendo apenas data, o que não é correto.
Ok, então não é o conjunto de TODOS os atributos, mas sim algum atributo em comum que o faz diferente dos outros (Entity)? E isso independe de como eu trate em questão de persistencia? Ou seja, mesmo que eu não anote o atributo url com um @Id, mas crie um campo id para tanto?
Posso definir que, se todos os atributos (juntos) de um objeto, formam sua singularidade, é VO. Se nenhum dos atributos o faz, necessitando então de um campo identificador, ou mesmo se um (ou mais) satisfaz essa singularidade, é Entity?