2010-07-18 2 views
0

J'ai un référentiel qui doit s'adapter à tout type de source de données.
Cela inclut certains types de services Web, de bases de données (utilisant ActiveRecord et NHibernate) et même des fichiers plats.
Pour ActiveRecord j'ai EnumerateQuery(IActiveRecordQuery query) qui renvoie un IEnumerable juste comme j'ai besoin mais l'interface est non documentée.
Que fait-il exactement? Comment l'utiliser?
Puis-je l'utiliser pour étendre ma fonction Fetch() pour accepter d'autres sources de données? Puis-je l'emballer avec ma propre classe afin d'accepter d'autres sources de données?Généraliser une fonction Fetch() pour les sources de données

Répondre

1

J'utiliserais plutôt IQueryable comme une abstraction. Faites en sorte que votre IRepository implémente IQueryable, puis le référentiel ActiveRecord délègue à Castle.ActiveRecord.Linq, le référentiel de fichiers plats sera implémenté en utilisant LINQ to XML, etc.

+0

Mais qu'en est-il de DetachedCriteria? –

+0

@the_drow: si vous exposez DetachedCriteria dans votre abstraction, vous êtes déjà lié à NHibernate et c'est vraiment une abstraction qui fuit. Si vous avez vraiment besoin de rendre votre référentiel indépendant de la source de données, IQueryable est le chemin à suivre, c'est pour cela qu'il a été construit. –

+0

Oui, le problème est que mes requêtes sont déjà écrites avec DetachedCriteria. Ai-je besoin d'utiliser des génériques à cette fin? –

Questions connexes