Essayer de faire un dépôt très simple et modèle couche de service ici. (.NET 4, C#, LINQ, bien que cette question soit partiellement agnostique). Remarque: ce n'est que R & D.Conseils Avec référentiel/service Design Pattern couche
Mon objectif est de minimiser la quantité de définitions de méthode dans ma couche de service.
Voici mon contrat Repository:
interface IFooRepository
{
IEnumerable<Foo> Find();
void Insert(Foo foo);
void Update(Foo foo);
void Delete(Foo foo);
}
Rien de nouveau.
Maintenant, voici ce que im (essayer) d'avoir dans mon contrat de service:
interface IFooDataService
{
public IEnumerable<Foo> Find(FooSearchArgs searchArgs);
}
Essentiellement, tout "Foo" particulier possède de nombreuses propriétés (id, nom, etc.), que je voudrais être capable de chercher.
Donc, je ne veux pas avoir la méthode 1x Trouver pour chaque propriété différente, je veux juste un - de cette façon quand je crée des propriétés supplémentaires je ne doivent modifier les contrats.
Les "FooSearchArgs" est un simple POCO avec toutes les différentes propriétés "Foo" it.
Alors, c'est ce que Im essayant de faire, voici mes questions:
- Est-ce une mauvaise conception? Si oui, quelles sont les alternatives?
- Comment puis-je implémenter ce filtrage dans la couche de service? Devrais-je vérifier quelles propriétés de "FooSearchArgs" sont définies, puis continuer à filtrer? (si cela, puis query.where, si cela, query.where, etc) Quelqu'un at-il une idée d'une méthode intelligente d'extension LINQ IEnumerable pour ce faire? (c'est-à-dire
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
Appréciez l'aide.
Une prise intéressante. Cependant, je préfère utiliser l'exécution différée (LINQ), car elle donne un contrôle beaucoup plus fin sur les requêtes (ce qui me permet de les construire dans la couche de service). Les appels en session fermée ne sont pas un problème car ils utilisent un autre modèle de conception pour combattre cela (ie UnitOfWork). Merci pour la réponse si (+1) - mal lire le schéma de spécification. – RPM1984
Vous pouvez trouver cela intéressant alors: http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/ C'est un exemple de la façon de mettre en œuvre un référentiel ignorant la persistance en utilisant la spécification et l'unité de modèles de travail. – Bronumski
Et celui-ci: http://www.kitchaiyong.net/2009/10/repository-specification-unit-of-work.html. Celui-ci va dans un peu plus de profondeur. – Bronumski