A seguinte situação:
Um simples relatório que mostra as contas a receber de um período x,y.
repoCR.contasRecPeriodo(x,y) => tras obj de ContaRec, baseado no padrão account(padrão account não é relevante nesse contexto)
No repoCR.contasRecPeriodo(x,y), ocorre o seguinte: (exemplo simplificado)
1 monta QueryObject
2 passa para o DomainStore (hibernate no caso)
ate aqui tranqüilo, a questão seria a seguinte: (exemplo simplificado)
o ContaRec tem ContaRec.Saldo, Saldo retorna a diferença entre lançamentos de D e C (como eu disse exemplo simplificado). Quando faço a apresentaçao dos obj contaRec a cada iteração faço um acesso a .saldo, logo no método saldo tenho:
- RepoCR.entryAll => retorna list de obj entry para calculo do saldo da conta.
- Faço um loop para compor o saldo = D e Entry = C a diferença entre D C = meu saldo.
Pergunta: vemos q a cada iteração tenho uma consulta, .salo . De fato isso se torna lento para a apresentação. Tudo bem que isso seria um custo do SoC, porem o repoCR.contasRecPeriodo não poderia ser mais inteligente e fazer ou tentar decompor o saldo ao trazer os obj contaRec.
Logo vejo as seguintes situações:
1 repoCR.contasRecPeriodo não cria QueryObject, visto ser limitado(no meu caso) para determinadas otimizações, e faz uma acesso direto a base de dados eliminando o papel do domainstore. Faz um SELECT direto. Porem fica a duvida de como o repositório ira traduzir o retorno do jdbc para o obj, sem o papel do Domainstore
2 no método contaRec.saldo, realmente esta certo o papel do repositório trazendo os lançamentos e depois os decompondo. Pergunto isso pq no padrão account isso fica implícito.
3 caso a possibilidade 1, seja aceita, não seria mais interessante, agora sim nesse caso, generalizar DomainStore, ou o DAO do DomainStore? Visto que, se uso o hibernate para ter flexibilidade de bancos de dados, no caso em que exista a possibilidade de otimização(e existe mto visto, os relatorios) em muitos casos não usaria o hibernate, e sim um acesso diferenciado que tb poderia ser flexível para qualquer SGDB. Vejam aqui q somente existe a necessidade de uso de SGDB.