Estamos usando um monte de classes separadas com o sufixo -repository
para recuperar os dados do banco de dados; para cada tabela seu próprio repositório.
Temos, por exemplo, uma customerrepository
classe que possui todos os tipos de métodos para recuperar clientes e uma vacancyrepository
que possui todos os tipos de métodos para recuperar vagas.
Eu tenho duas perguntas sobre essa maneira de fazer as coisas:
Que tal obter dados que abrangem várias tabelas? Por exemplo, tenho uma tela que mostra todos os clientes que ainda não criaram uma vaga. É possível
customerrepository
usar métodos dovacancyrespository
, ou ambos os repositórios retornam resultados e existe uma classe mais alta na hierarquia (vamos chamá-la dedataservice
) que obtém os resultados dos dois repositórios e os combina em um resultado?quanta lógica um repositório pode suportar?
Acho que não há problema em implementar o 'where active == true' em um repositório para recuperar apenas registros ativos, ou mesmo essa lógica simples deve ser tratada por uma classe mais alta na hierarquia (vamos chamá-lo dedataservice
)?
O exemplo que eu estava encontrando agora é este:
Temos uma lista de perguntas, que contém uma ou mais perguntas.
A pergunta pode ter um resultado, que é mantido em uma tabela separada.
Portanto, quando você deseja recuperar o resultado total da lista de perguntas, é necessário combinar dados da questionlist
tabela, da tabela de perguntas e da questionstatus
tabela.
No momento, temos 3 repositórios diferentes para essas tabelas.
Se eu perguntasse questionlistrepository
qual é o resultado total da lista número 12, ele teria que obter dados de dois outros repositórios e, portanto, ter alguma lógica, isso é permitido?
Ou existe questionlistdataservice
alguém que sabe quais repositórios usar?
Mais uma coisa: nossos repositórios podem resultar em um IQueryable
serviço de chamada que pode combinar facilmente os resultados, mas e se esse não for o caso, não acho que seja uma boa ideia recuperar todo o conteúdo de todas as três tabelas do base de dados.