Попытка сделать действительно простой репозиторий и шаблон уровня сервиса здесь.(.NET 4, C #, LINQ, хотя этот вопрос частично не зависит от языка).Примечание: это всего лишь R & D.
Моя цель - минимизировать количество определений методов в моем слое обслуживания.
Вот мой контракт с репозиторием:
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, name и т. д.),который я хотел бы иметь возможность искать.
Итак, я не хочу иметь 1x метод Find для каждого отдельного свойства, я просто хочу один - таким образом, когда я создаю дополнительные свойства, мне не нужно изменятьконтракты.
"FooSearchArgs" - это просто простое POCO со всеми различными свойствами "Foo".
Итак, вот что я пытаюсь сделать, вот мои вопросы:
- Это плохой дизайн?Если да, каковы альтернативы?
- Как я могу реализовать эту фильтрацию на уровне сервиса?Должен ли я проверить, какие свойства "FooSearchArgs" установлены, а затем продолжить фильтрацию?(если это, то query.where, если this, query.where и т. д.) У кого-нибудь есть идея умного метода расширения LINQ IEnumerable, чтобы сделать это?(т.е.
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
Цените помощь.