2010-02-18 6 views
1

Existe-t-il une meilleure pratique pour gérer les méthodes DAL avec une logique de recherche complexe? Je parle des besoins de l'entreprise commeParamétrage de méthodes de recherche complexes

"Liste des clients dont les sociétés sont actives ou en veille, ont plus de 1000 $ de commandes au cours du dernier trimestre, le client ne doit pas être supprimé, la société doit avoir un bureau à Londres ou New York et Paris ... "

Ces exigences font rapidement de vos CustomerDAL.GetCustomers (...) plus de 9000 paramètres, sans compter qu'ils changent tout le temps ce qui peut être pénible si vous avez beaucoup de couches , interfaces, services web etc.

Existe-t-il d'autres bonnes méthodes pour nettoyer les méthodes de ce type, en plus de créer une structure CustomerSearchParameters que vous créez et configurez avant d'appeler la méthode soi?

Répondre

1

Eh bien vous pouvez construire une expression dans la méthode appelant GetCustomers() et ensuite passer cette expression dans la requête, par ex.

GetCustomer(string where) 

Cependant, cela rend difficile la validation de la clause where. Une meilleure approche pourrait consister à utiliser une structure d'expression pour saisir les contraintes, ce serait aussi plus facile de valider l'expression avant d'exécuter la requête:

class Expression { 
    string PropertyName 
    object value 
} 

GetCustome(Expression[] constraints) 
1

Peut-être que vous devriez jeter un oeil à la JPA Criteria API. Même si vous n'utilisez pas JPA, un modèle comme celui-ci où vous pouvez ajouter des critères à votre requête de façon dynamique pourrait faire ce dont vous avez besoin. Je vous recommande de vous assurer que vous créez une API transparente (vos méthodes DAL ou DAO, par exemple, ne doivent pas s'appuyer directement sur l'API JPA Criteria).

Questions connexes