Boa tarde pessoal,
Eu estou com uma duvida com relação as agregações.
Suponha que eu tenho uma agregação Forum onde esta entidade é o root da agregação, mas tenho outras N listas ligadas a forum, por exemplo, usuarios, empresas e cargos. Isto é pq posso limitar o acesso a um forum especificamente para algumas empresas, alguns usuarios e alguns cargos.
A minha duvida é a seguinte:
- Imaginem q eu tenha uma página para associar ou desassociar cargos a um forum, logo na tela eu preciso da lista de cargos associados ao forum para que o usuario ja saiba a q cargos o forum ja esta associado, mas n literatura diz q pra eu acessar um filho da agregação eu preciso acessar atraves do root no caso forum, mas eu estou usando um ORM e qdo carrego forum ele ja carrega tdas associacoes pra mim “eu não posso usar lazy load”. Então eu quero saber se eu poderia trazer do repositorio direto os cargos ligados ao forum? ou se eu preciso carregar o forum no repositorio e mandar somente a lista para a UI ? ou oq vcs sugerem?
[]'s
Diego,
Aggregates/Roots são mais utilizados para vc gerenciar a comunicação que ocorre entre entidades importantes principalmente para reduzir a complexidade e gerenciar melhor dependências. Se sua aplicação é simples não há motivos para você utilizar. Na DDD vejo 3 “níveis” para vc combater complexidade:
- Coesão e acoplamento nas suas entidades, value objects, services, repositórios
- Separar Aggregates para ter um Root que atue como um gerenciador da comunicação entre vários Roots
- Separar Modules contendo vários Aggregates, quebrando ainda mais funcionalmente uma aplicação grande
- Separar Bounded Contexts (quando a UL começa a vazar, trata-se de domínios diferentes)
O que vc escreveu não está muito claro. Faz um yuml.me para clarear as idéias…
[quote=diego.dfsd]Boa tarde pessoal,
Eu estou com uma duvida com relação as agregações.
Suponha que eu tenho uma agregação Forum onde esta entidade é o root da agregação, mas tenho outras N listas ligadas a forum, por exemplo, usuarios, empresas e cargos. Isto é pq posso limitar o acesso a um forum especificamente para algumas empresas, alguns usuarios e alguns cargos.
A minha duvida é a seguinte:
- Imaginem q eu tenha uma página para associar ou desassociar cargos a um forum, logo na tela eu preciso da lista de cargos associados ao forum para que o usuario ja saiba a q cargos o forum ja esta associado, mas n literatura diz q pra eu acessar um filho da agregação eu preciso acessar atraves do root no caso forum, mas eu estou usando um ORM e qdo carrego forum ele ja carrega tdas associacoes pra mim “eu não posso usar lazy load”. Então eu quero saber se eu poderia trazer do repositorio direto os cargos ligados ao forum? ou se eu preciso carregar o forum no repositorio e mandar somente a lista para a UI ? ou oq vcs sugerem?
[]'s[/quote]
Pelo que vc descreveu essas outras entidades estão associada apenas para controle de segurança.
Então eu sugiro que crie uma entidade de segurança (ForumAccess) que referencia um Forum e tem esse povo associado.
Portanto esses caras não estão associados directamrnte ao forum e portanto não serão carregados.
Depois vc cria um serviço ForumSecurityService com o método resolveForumAccessFor(Forum f): ForumAccess;
Internamente vc utiliza uma query para recuperar o ForumAccess e sua troupe.
Bom,
Pelo que entendi a agregação é para garantir a consistencia dos objetos e para contextualizar, mas esqueçam isso pq nao faz diferença eu mencionei por mencionar. O q realmente importa é q eu tenho uma entidade Forum e tenhos outras entidade que estão diretamente ligadas a ela, pois posso associar cargos, usuarios e empresas, por exemplo.
E pensando em performance e tb em boas praticas quero saber se seria errado eu obter do repositorio diretamente os cargos associados ao forum X sem q para isto eu tenha q carregar o forum e td oq tem pendurado nele.
Sobre o forumaccess eu não entendi mto bem, pq ainda vou ter o problema de carregar td junto um lista de possiveis cargos, possiveis usuarios e possiveis empresas e é justamente o q o sistema nao pode fazer pq uma hora vai afetar e mto a performance.
Se vcs tiverem alguma ideia mais bacana para modelar nesta situação sou todo ouvidos…
Isso é um esboço pq eu estou somente estudando essa questao nao estou desenvolvendo isto ainda com DDD.

Obrigado pela ajuda ainda mais vindo de vcs dois…
[]'s