Попытка создания действительно простого шаблона репозитория и сервисного слоя здесь. (.NET 4, C#, LINQ, хотя этот вопрос является частично языковым агностиком). Примечание: это только R & D.Советы с шаблоном проектирования хранилища/сервисного уровня
Моя цель - минимизировать количество определений методов в моем сервисном слое.
Вот мой Repository контракта:
interface IFooRepository
{
IEnumerable<Foo> Find();
void Insert(Foo foo);
void Update(Foo foo);
void Delete(Foo foo);
}
Ничего нового.
Теперь, вот что им (пытается) иметь в своем договоре обслуживания:
interface IFooDataService
{
public IEnumerable<Foo> Find(FooSearchArgs searchArgs);
}
По существу, любой конкретный «Foo» обладает многими свойствами (ID, имя и т.д.), которые я хотел бы быть возможность поиска.
Итак, я не хочу иметь метод поиска 1x для каждого другого свойства, я просто хочу один - таким образом, когда создаю дополнительные свойства, мне не нужно изменять контракты.
«FooSearchArgs» - это просто POCO со всеми различными свойствами «Foo».
Итак, это то, что им пытаются сделать, вот мои вопросы:
- Является ли это плохой дизайн? Если да, то каковы альтернативы?
- Как реализовать эту фильтрацию на уровне сервиса? Должен ли я проверить, какие свойства «FooSearchArgs» установлены, а затем продолжать фильтрацию? (если это, то query.where, если это, query.where и т. д.). У кого-нибудь есть идея умного метода расширения LINQ IEnumerable для этого? (т.е.
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
Оцените справку.
Интересный взять. Однако я предпочитаю использовать отложенное выполнение (LINQ), поскольку он дает намного более тонкий контроль над запросами (что позволяет мне создавать их на уровне сервиса). Закрытые сеансы не являются проблемой, если использовать другой шаблон дизайна для борьбы с этим (например, UnitOfWork). Спасибо за ответ, хотя (+1) - плохо прочитали шаблон спецификации. – RPM1984
Вы можете найти это интересно тогда: http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/ Это пример того, как реализовать сохраняя неосведомленный репозиторий, используя спецификацию и единицу рабочих шаблонов. – Bronumski
И этот: http://www.kitchaiyong.net/2009/10/repository-specification-unit-of-work.html. Это идет немного глубже. – Bronumski