尝试在这里创建一个非常简单的存储库和服务层模式。(.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、name 等),我希望能够对其进行搜索。
所以,我不想为每个不同的属性使用 1x Find 方法,我只想要一个 - 这样当我创建额外的属性时,我不必修改合同。
“FooSearchArgs”只是一个简单的 POCO,它具有所有不同的“Foo”属性。
所以,这就是我想要做的,这是我的问题:
- 这是糟糕的设计吗?如果是这样,有哪些替代方案?
- 我如何在服务层实现这种过滤?我是否必须检查设置了“FooSearchArgs”的哪些属性,然后继续过滤?(如果是这样,那么 query.where,如果是这样,query.where 等) 任何人都知道一个聪明的 LINQ IEnumerable 扩展方法来做到这一点?(即
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
感谢帮助。