DDD - Value Object

E ai pessoal, blz?

Bom, eu estou com uma dúvida… estou precisando desenvolver um site que tenha tag cloud, aquelas tags que são associadas a alguma coisa e quanto mais associações esse tag tiver a tag é exibida com mais destaque. Eu quero usar os conceitos de DDD pra esse site e minha dúvida é de como implementar essa funcionalidade. Pra mim uma tag é um V.O com uma descrição e sua quantidade, mais como eu faria pra persistir a sua quantidade e como eu faria pra recuperar as tags elas sendo V.Os? Eu sei que posso transformar esse V.O em uma entidade e esta td resolvido mais acho q nesse caso eu estaria indo contra o que é lógico que é tornar a tag um V.O.

Posso estar errado, mas não vejo problema em você ter um VO e uma tabela correspondente a ele. No caso, eu criaria a classe Tag contendo apenas um atributo contendo a própria tag, que seria também a chave primária da tabela.

Mais esquecendo o banco de dados. Eu tenho um objeto que ao meu ver é um V.O e pode ser associado a alguns artigos no meu site, por exemplo. Quero poder persistir esse objeto e carregar ele e o count dele pra poder criar meu tagcloud. Mais pra criar o meu tagcloud eu preciso poder carregar somente os objetos tag sem associação com nenhum outro objeto e neste caso eu teria de ter uma forma de carrega-lo no caso um repositório e repositórios só podem existir para aggregates o que não é o meu caso. Eu sei que posso tornar meu objeto tag um entity mais nao sei se este objeto é uma entity pra mim não é. Como resolvo isso?

Onde você viu isso? E como você gerencia o ciclo de vida de uma entidade comum se não for através de um repositório?

Crie um repositório para a classe Tag e seja feliz.

Artigo parece ser seu aggregate. Use o repositorio de artigos para acessar as tags.

Onde você viu isso? E como você gerencia o ciclo de vida de uma entidade comum se não for através de um repositório?

Crie um repositório para a classe Tag e seja feliz.[/quote]

Aires,

Ele leu isso no livro do Eric Evans. A idéia é que uma Entidade só pode ser acessada através de seu Aggregate Root e Aggregate Roots podem ser acessados através de Repositórios.

Uma análise bem superficial com base no que você valou me passa que a tag tem uma identidade única o que a caracteriza como uma entidade e teria dentro referencia para os diversos posts que obviamente são entidades. O total de posts seria justamente um comportamento dela, contando o número de posts associados.
Já a nuvem pode ser objeto valor ou simplesmente um serviço, não consigo ter uma boa base para decidir com tão poucas informações. Lembrando que um objeto valor pode conter dentro dele referencias a entidades!

Eu acho que Tag é um Value Object. Qual a diferença entre duas tags chamadas “java”? Nenhuma, até onde posso ver. Se um objeto é definido exclusivamente por seus atributos, ele é um Value Object e não uma Entidade. Mas posso estar errado.

[quote=x@ndy]Uma análise bem superficial com base no que você valou me passa que a tag tem uma identidade única o que a caracteriza como uma entidade e teria dentro referencia para os diversos posts que obviamente são entidades. O total de posts seria justamente um comportamento dela, contando o número de posts associados.
Já a nuvem pode ser objeto valor ou simplesmente um serviço, não consigo ter uma boa base para decidir com tão poucas informações. Lembrando que um objeto valor pode conter dentro dele uma entidade![/quote]

Tag poderia ser uma entidade se ele precisar manter um historico da evolução de cada tag registrado no sistema, o que não me parece ser o caso.

Como um objeto valor poderia conter uma entidade e ainda assim permanecer imutavel?

Como eu disse a análise é superficial. Eu entendi dessa maneira, antes de implementar teria que análisar e modelar melhor.

Ops, temos um problema de conceito ai. O objeto valor é imutável mas seus atributos não!!! Exemplo: Se considerarmos uma entidade pessoa e que ela tenha um endereço como objeto valor. O objeto endereço é imutável e é somente dessa pessoa correto né! Porém essa pessoa pode se mudar, ou seja, os atributos logradouro, número, bairro, etc da classe endereço teriam que ter novos valores! O objeto endereço deixaria de ser imutável então?! Não!! A pessoa receberia apenas um novo endereço!

“OBJETOS VALOR podem até se referir a ENTIDADES. Por exemplo, se eu pedir a um serviço de mapas online uma rota panorâmica de São Fransisco a Los Angeles, ele poderia deduzir um objeto Rota Ligando Los Angeles a São Fransisco através da Pacific Coast Highway. Esse objeto Rota seria um VALOR embora os três objetos a que ele se refere (duas cidades e uma estrada) sejam ENTIDADES” Eric Evans, Domain-Drive Design, página 94

[quote=x@ndy]

Ops, temos um problema de conceito ai. O objeto valor é imutável mas seus atributos não!!! Exemplo: Se considerarmos uma entidade pessoa e que ela tenha um endereço como objeto valor. O objeto endereço é imutável e é somente dessa pessoa correto né! Porém essa pessoa pode se mudar, ou seja, os atributos logradouro, número, bairro, etc da classe endereço teriam que ter novos valores! O objeto endereço deixaria de ser imutável então?! Não!! A pessoa receberia apenas um novo endereço![/quote]

Não sei aonde quer chegar. Eu questionei objeto valor conter uma entidade, o seu exemplo é de uma entidade contendo um valor objeto.

O fato é, se um objeto é imutavel, ele pode conter no máximo um identificador, mas não pode conter a própria entidade, que é mutável.

[quote=x@ndy]
“OBJETOS VALOR podem até se referir a ENTIDADES. Por exemplo, se eu pedir a um serviço de mapas online uma rota panorâmica de São Fransisco a Los Angeles, ele poderia deduzir um objeto Rota Ligando Los Angeles a São Fransisco através da Pacific Coast Highway. Esse objeto Rota seria um VALOR embora os três objetos a que ele se refere (duas cidades e uma estrada) sejam ENTIDADES” Eric Evans, Domain-Drive Design, página 94[/quote]

Acho que a primeira sentença diz tudo né?

Verbo

re.fe.rir

  1. mencionar, citar, fazer alusão
    * ele se referiu a essa entidade como “uma nova força política”

Obviamente, o Xandy quis dizer “conter uma referência a uma Entidade” quando disse “conter uma Entidade”.

Sim!
No primeiro Post eu já coloquei isso
Uma análise bem superficial com base no que você valou me passa que a tag tem uma identidade única o que a caracteriza como uma entidade e teria dentro referencia para os diversos posts que obviamente são entidades. O total de posts seria justamente um comportamento dela, contando o número de posts associados.

[quote=mochuara][quote=x@ndy]

Ops, temos um problema de conceito ai. O objeto valor é imutável mas seus atributos não!!! Exemplo: Se considerarmos uma entidade pessoa e que ela tenha um endereço como objeto valor. O objeto endereço é imutável e é somente dessa pessoa correto né! Porém essa pessoa pode se mudar, ou seja, os atributos logradouro, número, bairro, etc da classe endereço teriam que ter novos valores! O objeto endereço deixaria de ser imutável então?! Não!! A pessoa receberia apenas um novo endereço![/quote]

Não sei aonde quer chegar. Eu questionei objeto valor conter uma entidade, o seu exemplo é de uma entidade contendo um valor objeto.

O fato é, se um objeto é imutavel, ele pode conter no máximo um identificador, mas não pode conter a própria entidade, que é mutável.

[quote=x@ndy]
“OBJETOS VALOR podem até se referir a ENTIDADES. Por exemplo, se eu pedir a um serviço de mapas online uma rota panorâmica de São Fransisco a Los Angeles, ele poderia deduzir um objeto Rota Ligando Los Angeles a São Fransisco através da Pacific Coast Highway. Esse objeto Rota seria um VALOR embora os três objetos a que ele se refere (duas cidades e uma estrada) sejam ENTIDADES” Eric Evans, Domain-Drive Design, página 94[/quote]

Acho que a primeira sentença diz tudo né?[/quote]

Corrigi o trecho! Onde disse conter eu queria dizer conter uma referencia. Realmente não havia ficado claro. Imaginei que você estava questinando a imutabilidade dos atributos ou comportamento de um objeto valor, que podem mudar!

Então ele quis dizer “Value objects podem conter uma Entidade” querendo na vedade dizer “Value Objects podem conter apenas value objects” e isso é obvio?

[quote=x@ndy][quote=mochuara][quote=x@ndy]

Ops, temos um problema de conceito ai. O objeto valor é imutável mas seus atributos não!!! Exemplo: Se considerarmos uma entidade pessoa e que ela tenha um endereço como objeto valor. O objeto endereço é imutável e é somente dessa pessoa correto né! Porém essa pessoa pode se mudar, ou seja, os atributos logradouro, número, bairro, etc da classe endereço teriam que ter novos valores! O objeto endereço deixaria de ser imutável então?! Não!! A pessoa receberia apenas um novo endereço![/quote]

Não sei aonde quer chegar. Eu questionei objeto valor conter uma entidade, o seu exemplo é de uma entidade contendo um valor objeto.

O fato é, se um objeto é imutavel, ele pode conter no máximo um identificador, mas não pode conter a própria entidade, que é mutável.

O que vc entende por referencia em DDD?

[quote=adtve]E ai pessoal, blz?

Bom, eu estou com uma dúvida… estou precisando desenvolver um site que tenha tag cloud, aquelas tags que são associadas a alguma coisa e quanto mais associações esse tag tiver a tag é exibida com mais destaque. Eu quero usar os conceitos de DDD pra esse site e minha dúvida é de como implementar essa funcionalidade. Pra mim uma tag é um V.O com uma descrição e sua quantidade, mais como eu faria pra persistir a sua quantidade e como eu faria pra recuperar as tags elas sendo V.Os? Eu sei que posso transformar esse V.O em uma entidade e esta td resolvido mais acho q nesse caso eu estaria indo contra o que é lógico que é tornar a tag um V.O.[/quote]

Como o post anterior ficou confuso vou tentar explicar melhor o meu ponto de vista baseado na curta análise que fiz!

  1. A meu ver a Tag é uma ENTIDADE nesse caso porque ela é unica e precisa ter uma identidade além de necessitar ser persistida. Eu não posso ter Tags repetidas. Essa Tag teria referências aos diversos Posts, que também são entidades. A contagem do número de Posts não deveria ser um atributo da tag e sim um comportamento do objeto que calcula o total com base nos posts referenciados. Não faz muito sentido, “do meu ponto de vista”, a classe conter referências aos Posts e um contador para dizer quantos posts ela contém! É mais fácil calcular o número de referências!
  2. A nuvem seria um OBJETO VALOR contendo diversas referencias as Tags. A nuvem seria única. Não faz sentido ser uma entidade! A não ser é claro, que você queira ter diversas nuvens com identidades separadas, ai tudo muda de figura!

Então ele quis dizer “Value objects podem conter uma Entidade” querendo na vedade dizer “Value Objects podem conter apenas value objects” e isso é obvio?[/quote]
Não. Eu disse explicitamente que Objetos Valor podem conter referência a entidades!

Não entendi sua colocação! Você quer dizer que um OBJETO VALOR, só pode conter outros OBJETOS VALORES e nunca pode conter uma referência a uma entidade é isso?

[quote=mochuara][quote=x@ndy][quote=mochuara][quote=x@ndy]

Ops, temos um problema de conceito ai. O objeto valor é imutável mas seus atributos não!!! Exemplo: Se considerarmos uma entidade pessoa e que ela tenha um endereço como objeto valor. O objeto endereço é imutável e é somente dessa pessoa correto né! Porém essa pessoa pode se mudar, ou seja, os atributos logradouro, número, bairro, etc da classe endereço teriam que ter novos valores! O objeto endereço deixaria de ser imutável então?! Não!! A pessoa receberia apenas um novo endereço![/quote]

Não sei aonde quer chegar. Eu questionei objeto valor conter uma entidade, o seu exemplo é de uma entidade contendo um valor objeto.

O fato é, se um objeto é imutavel, ele pode conter no máximo um identificador, mas não pode conter a própria entidade, que é mutável.

O que vc entende por referencia em DDD?[/quote]
A mesma coisa que significa em Java. É contér uma referência a um Objeto. Esse objeto pode mudar indepente de quantas referências ele tem.
Vou pegar o exemplo do Evans. A Rota é um OBJETO VALOR que contém referência a duas cidades que são ENTIDADES. As Cidades podem mudar seu comportamento independemente da Rota, digamos que um dos comportamentos dessa classe cidade seja o número de habitantes nacidos nela. Isso mudaria a todo o minuto!