8
votes

Meilleures pratiques | Où mettre la logique de recherche si nous avons un référentiel différent pour chaque entité

Je travaille sur une application dans laquelle avoir des référentiels différents pour différentes entités et que je dois maintenant mettre la logique de recherche, alors je suis confus où devrais-je mettre ma logique de recherche, dois-je créer un nouveau référentiel de recherche ou devrais-je mettre La logique dans le référentiel existant et si je devrais mettre dans certains référencements existants, lequel est-il.

Les référentiels sont énumérés ci-dessous P>

public class VendorRepository
{

}

public class ProductRepository
{

}

Public Class ProductBatchRepository
{

}


4 commentaires

La recherche est une bête complètement différente qu'un simple référentiel. Déplacez-le dans sa propre classe et faites-la référence toutes.


Toutes ces réponses sont-elles simplement confuses ajouter un commentaire et Publier votre réponse boutons?


Il existe de nombreuses solutions et modèles possibles pour ce faire, cela dépend de ce que vous valorisez avec votre fonctionnalité de recherche - Extensibilité, vitesse, génériques? Tout d'abord, répondez-y: pouvez-vous renvoyer les résultats de votre recherche génériquement? Si vous mettriez votre logique de recherche dans un référentiel à part - pouvez-vous séparer les préoccupations de bonne manière et le modulariser? Est-ce que cela annule votre modèle sémantique de quelque manière que ce soit?


Je me concentre sur l'extensibilité car il ne s'agit que d'une étape initiale, alors mon objectif n'est donc pas à la vitesse pour le moment, et je suis confus car ce n'est qu'une fonctionnalité et non une entité de mon domaine


7 Réponses :


1
votes

Je créerais des méthodes de recherche de chaque entité dans le référentiel respectif et crée une autre classe qui les appellerait tous pour tout chercher et transformer les résultats dans la forme souhaitable ...


3 commentaires

Je dois appeler une seule procédure stockée qui me retournera la liste de l'ID de produit, puis je dois obtenir les détails de l'ID de produit.


Puis mettez-le dans le référentiel de produits ... et le code pour obtenir tous les détails en classe séparée ...


J'ai mis en œuvre le concept d'UnitOfwork et mettre la logique dans l'unité de travail, mais elle a à nouveau posé problème, car je dois donner un objet d'entrée à la méthode contenant un ensemble de filtres, la question est donc de mettre la classe d'objet dans mon domaine projet ou dans la BLL



1
votes

Vous devez créer des méthodes de recherche dans chaque référentiel de cette manière lorsque vous souhaitez rechercher uniquement des produits que vous pouvez faire produire. Cela vous permettra également d'optimiser la méthode de recherche de chaque référentiel qui sera plus rapide qu'une recherche massive.


1 commentaires

Je ne peux pas mettre la recherche dans chaque référentiel car elle dégrader la vitesse de la recherche



1
votes

Je ne suis pas sûr que je sois sûr que je comprends votre question, mais si vous voulez dire que vous avez des connexions à différentes bases de données et que vous souhaitez implémenter la logique de recherche, je serais enclin à créer une classe de travail spécifiquement avec la recherche - séparant cette fonctionnalité de Vos données ont toujours tendance à être bons IDE car cela signifie que la logique sera complètement distincte de tout changement que vous pourriez faire et donc à l'abri de la suppression si vous supprimez accidentellement le référentiel.


0 commentaires

1
votes

Si c'est une application Web que vous écrivez, pourquoi ne pas simplement mettre en place un lien d'étiquette d'ancrage à Google? Cela vous évitera de devoir écrire vous-même le code.


3 commentaires

ce n'est pas possible parce que j'ai mes propres critères pour donner des résultats aux résultats


Mec, vous n'avez pas reçu de moi, j'ai dit que j'ai une logique personnalisée pour classer mes résultats, par exemple, je voudrais peut-être montrer les produits d'abord qui ont une date d'expiration à proximité de ou qui ont une réduction sur eux et que je ne pense pas que Google peut la mettre en œuvre.


@baxter - Pas tout à fait: un moteur de recherche général (Google, Bing) ne comprend pas votre propre site et votre structure de données comme vous (en tant que développeur).



2
votes

Approche alternative que j'aime utiliser ...

... vous pouvez Commandes séparées des requêtes . Vos commandes utiliseraient le modèle de domaine et les référentiels sous-jacents (comme vous l'avez maintenant?); Pendant que vos requêtes pouvaient utiliser une autre technologie; par exemple; Requête la base de données directement à l'aide du code-cadre d'entité en premier.

De cette façon, vous avez toute la flexibilité d'interrogation (à l'aide de LINQ) et de contourner des couches qui n'ajoutent pas de la valeur à la requête et concevez les types de retour spécifiquement pour vos clients. Vous pouvez même utiliser des vues de base de données si cela faciliterait la requête.


0 commentaires

0
votes

Eh bien, grâce à chacun de la participation à la discussion, j'ai beaucoup cherché à ce sujet et j'ai finalement décidé de mettre la logique dans un référentiel différent où cela ne suit pas les meilleures pratiques, mais c'est la meilleure solution dans mon problème.


0 commentaires

2
votes

Pourquoi pas un référentiel de base? Quelque chose comme ceci: xxx

puis les référentiels: xxx


1 commentaires

Hey bidoy merci pour l'aide et je suis déjà suivant le même motif, mais je mettant en œuvre une recherche de texte gratuite pour que je puisse appeler la procédure stockée, c'est pourquoi je voulais le mettre ailleurs