DAO/Repositorio dentro ou fora do objeto?

ou
[code]avaliacao = new Avaliacao( usrAvaliado, usrAvaliador, nota ) );[/code]

ou

[quote=marcosurata]Senhores,

estou estudando e lendo o livro do Evans. Acompanhei essa thread desde o início e aproveitando o gancho que esta mudou um pouco o foco da discussão gostaria de confirmar algumas coisas. Está certo, dentro do contexto do DDD, a responsabilidade das camadas abaixo?
[/quote]

Sim, até aqui:

A camada de persistência não é uma camada de domínio tal como a camada de aplicação não é.
A camada de aplicação consume serviços (invoca métodos) das classes do dominio.
A camada de domínio não consome serviços da camada de persistência.
Do ponto de vista do dominio essa camada não existe. O que existe são vários repositórios.

Os repositórios, por sua vez. são responsáveis por preservar ( não necessáriamente persistir) o estado do dominio ( que é o estado do sistema). Se eles escolhem preservar em memória ( prevalência) ou em disco ( persistência) é uma decisão deles.

Portanto eles não são , nem estão , na camada de persistência. Eles consomem serviços das classes da camada de persistencia.

Em uma arquitetura orientada ao dominio os repositórios são elementos do domínio.

[quote=danieldestro]usuario.addAvaliacao( new Avaliacao( usrAvaliador, nota ) );
ou

A avaliação surge do nada? :stuck_out_tongue:

Eu acho que o mais correto seria usuarioAvaliador.avalia(usuario, nota).

new é nada? rsrsrs…

Se for assim você corre o risco de ter a “Matrix” toda no seu objeto.

usuario.avalia( usuario, nota ); usuario.compra( papelHigienico ); usuario.ler( livro ); usuario.viaja( aviao, lugarParadisiaco ); usuario.namora( gretchen ); usuario.compra( seguroDoCarro ); usuario.vai( carro, hospital );

Não fica um modelo complicado (estufado) demais?

Se o modelo reflete no negócio, talvez o negócio é que esteja estufado demais.

De qualquer modo, uma delegação de responsabilidade ajuda a resolver.

[quote=sergiotaborda][quote=marcosurata]Senhores,

estou estudando e lendo o livro do Evans. Acompanhei essa thread desde o início e aproveitando o gancho que esta mudou um pouco o foco da discussão gostaria de confirmar algumas coisas. Está certo, dentro do contexto do DDD, a responsabilidade das camadas abaixo?
[/quote]

Sim, até aqui:

A camada de persistência não é uma camada de domínio tal como a camada de aplicação não é.
A camada de aplicação consume serviços (invoca métodos) das classes do dominio.
A camada de domínio não consome serviços da camada de persistência.
Do ponto de vista do dominio essa camada não existe. O que existe são vários repositórios.

Os repositórios, por sua vez. são responsáveis por preservar ( não necessáriamente persistir) o estado do dominio ( que é o estado do sistema). Se eles escolhem preservar em memória ( prevalência) ou em disco ( persistência) é uma decisão deles.

Portanto eles não são , nem estão , na camada de persistência. Eles consomem serviços das classes da camada de persistencia.

Em uma arquitetura orientada ao dominio os repositórios são elementos do domínio.

[/quote]

Obrigado sergio, muito esclarecedora sua resposta. :slight_smile:

Imaginando que o domínio preve q o usuário tenha de fazer todas essas coisas.

[quote=danieldestro]new é nada? rsrsrs…

Se for assim você corre o risco de ter a “Matrix” toda no seu objeto.

usuario.avalia( usuario, nota ); usuario.compra( papelHigienico ); usuario.ler( livro ); usuario.viaja( aviao, lugarParadisiaco ); usuario.namora( gretchen ); usuario.compra( seguroDoCarro ); usuario.vai( carro, hospital );

Não fica um modelo complicado (estufado) demais?[/quote]

Isso seria uma opção para evitar o usuário estar estufado demais?

usuario.executa(new avaliacao( usuario, nota )); usuario.executa(new compra( papelHigienico )); usuario.executa(new ler( livro )); usuario.executa(new viaja( aviao, lugarParadisiaco )); usuario.executa(new namora( gretchen )); usuario.executa(new compra( seguroDoCarro )); usuario.executa(new vai( carro, hospital ));

[quote=Edufa]Isso seria uma opção para evitar o usuário estar estufado demais?

usuario.executa(new avaliacao( usuario, nota )); usuario.executa(new compra( papelHigienico )); usuario.executa(new ler( livro )); usuario.executa(new viaja( aviao, lugarParadisiaco )); usuario.executa(new namora( gretchen )); usuario.executa(new compra( seguroDoCarro )); usuario.executa(new vai( carro, hospital ));[/quote]

Não! Mas isto seria:

aval = new Avaliacao( avaliado, avaliador, nota ); new Carro().leva( usuario, hospital );