Nous utilisons un tas de classes distinctes suffixées avec -repository
pour récupérer les données de la base de données; pour chaque table son propre référentiel.
Nous avons par exemple une customerrepository
classe qui a toutes sortes de méthodes pour récupérer les clients, et une vacancyrepository
qui a toutes sortes de méthodes pour récupérer les postes vacants.
J'ai deux questions sur cette façon de faire:
Que diriez-vous d'obtenir des données qui s'étendent sur plusieurs tables? Par exemple, j'ai un écran qui montre tous les clients qui n'ont pas encore créé de poste vacant. Une
customerrepository
méthode peut-elle utiliser lesvacancyrespository
, ou les deux référentiels renvoient-ils des résultats et existe-t-il une classe plus élevée dans la hiérarchie (appelons-la adataservice
) qui obtient les résultats des deux référentiels et les combine en un seul résultat?quelle logique un tel référentiel peut-il gérer?
Je pense qu'il est OK d'implémenter le 'where active == true' dans un référentiel pour récupérer uniquement les enregistrements actifs, ou même cette logique simple devrait-elle être gérée par une classe plus élevée dans la hiérarchie (appelons-la adataservice
)?
L'exemple que je rencontrais maintenant est celui-ci:
Nous avons une liste de questions, qui contient une ou plusieurs questions.
La question peut avoir un résultat, qui est conservé dans un tableau séparé.
Ainsi, lorsque vous souhaitez récupérer le résultat total de la liste de questions, vous devez combiner les données du questionlist
tableau, du tableau des questions et du questionstatus
tableau.
À l'heure actuelle, nous avons 3 référentiels différents pour ces tables.
Si je demandais questionlistrepository
quel est le résultat total pour la liste numéro 12, il faudrait obtenir des données de deux autres référentiels et donc avoir une certaine logique, est-ce autorisé?
Ou existe-t-il un questionlistdataservice
qui sait quels référentiels utiliser?
Une dernière chose: nos référentiels peuvent entraîner un IQueryable
afin qu'un service appelant puisse facilement combiner les résultats, mais qu'en est-il lorsque ce n'est pas le cas, je ne pense pas que ce soit une bonne idée de récupérer tout le contenu des trois tables à partir du base de données.