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.
fonte
Respostas:
O repositório retorna objetos de domínio e é construído sobre as camadas de mapeamento. Para um domínio de domínio muito simples, os objetos e as tabelas de banco de dados podem ser praticamente os mesmos.
Se o seu repositório está sempre retornando uma representação exata da sua estrutura de dados, pode ser o Table Data Gateway, também conhecido como Data Access Object (DAO).
Exemplo: Seu banco de dados possui tabelas para pessoa e endereço. No endereço de domínio do aplicativo, não é uma entidade própria, é apenas uma propriedade de Person. Nesse caso, você não teria PersonRepository e AddressRepository. Você apenas tem PersonRepository. O domínio não deve se preocupar com a forma como os dados do domínio são mantidos. Essas responsabilidades estão em uma camada atrás do repositório.
Pelo seu exemplo, parece que você realmente tem DAOs e acabou de nomeá-los Repositórios.
fonte