Je dispose de référentiels (par exemple ContactRepository, UserRepository, etc.) qui encapsulent l'accès aux données du modèle de domaine.
Quand je regardais recherche de données par exemple
- trouver un contact dont le prénom commence par XYZ
-
un contact dont l'anniversaire est postérieur à 1960
(etc),
J'ai commencé à mettre en œuvre des méthodes de référentiel telles que FirstNameStartsWith(string prefix) y Plus jeune que l'année de naissance(int année) en suivant les nombreux exemples existants.
Puis j'ai rencontré un problème : que faire si je dois combiner plusieurs recherches ? Chacune de mes méthodes de recherche de référentiel, comme ci-dessus, ne renvoie qu'un ensemble fini d'objets réels du domaine. À la recherche d'une meilleure méthode, j'ai commencé à écrire méthodes d'extension sur IQueryable<T>, par exemple this :
public static IQueryable<Contact> FirstNameStartsWith(
this IQueryable<Contact> contacts, String prefix)
{
return contacts.Where(
contact => contact.FirstName.StartsWith(prefix));
}
Maintenant, je peux faire des choses comme
ContactRepository.GetAll().FirstNameStartsWith("tex").YoungerThanBirthYear(1960);
Cependant, je me suis retrouvé à écrire des méthodes d'extension (et à inventer des classes farfelues telles que ContactsQueryableExtensions partout, et je perds le "beau regroupement" en ayant tout dans le dépôt approprié.
Est-ce vraiment la bonne façon de procéder, ou existe-t-il un meilleur moyen d'atteindre le même objectif ?