Entidades de Negócio 'Enxergam' repositórios?

Imagine um sistema onde você tem classes de Serviço, Entidades de Negócio, Value Objects e Repositórios.

Num sistema com estas características, as Entidades de Negócio pdem acessar Repositórios diretamente para fazer buscas por outras entidades? Ou será que as dependências entre as entidades devem ser orquestrades/injetadas pelos Serviços?

No sistema onde trabalho, usamos uma solução híbrida. Ter as Entidades de Negócio acessando repositórios me dá uma sensação de que há algo de estranho no ar, mas a verdade é que isso facilita tremendamente a vida e seria praticamente impossível refatorar o sistema para remover esta dependência. Meu lado purista me diz que está errado, mas meu lado pragmático me diz que está certo. Talvez, seja apenas implicância minha e não há problema nenhum em ter esta dependência.

O que vocês acham? Essa é uma dúvida arquitetural que sempre tive. Não sei se existe uma resposta única ou definitiva, mas gostaria de ouvir a opinião de vocês.

[quote=domingos.neto]Imagine um sistema onde você tem classes de Serviço, Entidades de Negócio, Value Objects e Repositórios.

Num sistema com estas características, as Entidades de Negócio pdem acessar Repositórios diretamente para fazer buscas por outras entidades?
[/quote]

podem. É para isso mesmo que os repositorios servem. Claro que “directamente” não significa “o repositorios é uma classe com métodos estáticos”, significa “a cada entidade estão associados vários repositorios”.

Não.
Se ha alguma injeção automática isso é conttrolado pela aplicação não pelo dominio.

Não ha nada de estranho em que as entidades usem os repositorios. O que é estranho é que elas usem os seus proprios repositorios para se peristir. Essa actividade de edição é que deve - sim - ser controlada por serviços.

Repositórios fazem parte da linguagem do domínio e por isso odem ser acessados por outros membros do Domain Model sem maiores problemas.

Se está cheirando mal será que você não tem DAOs e está os chamando de repositórios?

[quote=sergiotaborda]
O que é estranho é que elas usem os seus proprios repositorios para se peristir. Essa actividade de edição é que deve - sim - ser controlada por serviços.[/quote]

Por que isso será estranho sérgio ?

Isso seria Active Record, não ?

PS

Caros, não entendi como manter o respositório setado na entidade sendo que essa entidade é retornada por uma consulta do hibernate.

Vou tentar criar um exemplo…

Entidade:
Processo{
private OrgaoRepositorio orgaoRepositorio;
}

Mapeamento do Spring


EntidadeRepositorio{
Processo obterPorId(){
//aqui eu vou retornar um processo pelo id
//o orgaoRepositorio vai está null???!!!
}
}

Desculpem o exemplo específico mas não estou conseguindo fazer funcionar DDD+Meu pacote de frameworks!!!

[quote=joellobo]Caros, não entendi como manter o respositório setado na entidade sendo que essa entidade é retornada por uma consulta do hibernate.

Vou tentar criar um exemplo…

Entidade:
Processo{
private OrgaoRepositorio orgaoRepositorio;
}

Mapeamento do Spring


EntidadeRepositorio{
Processo obterPorId(){
//aqui eu vou retornar um processo pelo id
//o orgaoRepositorio vai está null???!!!
}
}

Desculpem o exemplo específico mas não estou conseguindo fazer funcionar DDD+Meu pacote de frameworks!!!
[/quote]

Ou o spring faz a injecao ou vc seta o repositorio namao antes de reotrnar o processo, qual a duvida?