试图在这里创建一个非常简单的存储库和服务层模式。 (.NET 4,C#,LINQ,尽管这个问题部分与语言无关)。注意:这只是R & D.存储库/服务层设计模式的建议
我的目标是尽量减少我的服务层中的方法定义的数量。
这里是我的仓库合同:
interface IFooRepository
{
IEnumerable<Foo> Find();
void Insert(Foo foo);
void Update(Foo foo);
void Delete(Foo foo);
}
没有什么新东西。
现在,这里是IM(试图)有我的服务合同:
interface IFooDataService
{
public IEnumerable<Foo> Find(FooSearchArgs searchArgs);
}
从本质上讲,任何特定的“富”有许多属性(ID,姓名等),我想是能够搜索。
所以,我不想有1x查找方法为每个不同的属性,我只想要一个 - 这种方式时,我创建额外的属性,我不必修改合同。
“FooSearchArgs”只是一个简单的POCO,它具有所有不同的“Foo”属性。
所以,这就是我尝试做的,这是我的问题:
- 这是糟糕的设计?如果是这样,有什么选择?
- 我该如何在服务层实现这个过滤?我是否需要检查“FooSearchArgs”的属性设置,然后继续过滤? (如果这样,然后query.where,如果这,query.where等)任何人都有一个聪明的LINQ IEnumerable扩展方法做到这一点的想法? (即
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
感谢帮助。
一个有趣的事情。不过,我更喜欢使用延迟执行(LINQ),因为它可以更好地控制查询(允许我在服务层中构建它们)。由于使用其他设计模式来解决这个问题(即UnitOfWork),封闭的会话调用并不是问题。虽然(+1)谢谢你的回答 - 我有一个阅读规格模式。 – RPM1984 2010-08-25 11:14:15
您可能会发现这个有趣的:http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/ 这是一个如何实现使用规范和工作模式单元的持久性无知存储库。 – Bronumski 2010-08-25 11:30:48
而这一个:http://www.kitchaiyong.net/2009/10/repository-specification-unit-of-work.html。这个更深入一点。 – Bronumski 2010-08-25 11:36:11