【发布时间】:2010-08-25 00:39:55
【问题描述】:
在这里尝试创建一个非常简单的存储库和服务层模式。 (.NET 4、C#、LINQ,尽管这个问题部分与语言无关)。注意:这只是研发。
我的目标是尽量减少服务层中方法定义的数量。
这是我的存储库合同:
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 Find 方法,我只想要一个 - 这样当我创建额外的属性时我不必修改合同。
“FooSearchArgs”只是一个简单的 POCO,它具有所有不同的“Foo”属性。
所以,这就是我想要做的,这是我的问题:
- 这是糟糕的设计吗?如果有,有哪些替代方案?
- 如何在服务层实现这种过滤?我是否必须检查设置了“FooSearchArgs”的哪些属性,然后继续过滤? (如果是这样,那么 query.where,如果是这样,query.where 等) 任何人都知道一个聪明的 LINQ IEnumerable 扩展方法来做到这一点? (即
repository.WhereMeetsSearchCriteria(fooSearchArgs))
感谢您的帮助。
【问题讨论】:
标签: c# linq extension-methods repository-pattern service-layer