【发布时间】:2009-09-13 01:13:20
【问题描述】:
我有封装对域模型的数据访问的存储库(例如 ContactRepository、UserRepository 等)。
当我查看搜索数据时,例如
- 查找其名字的联系人 以 XYZ 开头
-
生日在之后的联系人 1960
(等),
我开始实现诸如 FirstNameStartsWith(string prefix) 和 YoungerThanBirthYear(int year) 之类的存储库方法,基本上遵循了许多示例。
然后我遇到了一个问题 - 如果我必须合并多个搜索怎么办?我的每个存储库搜索方法,例如上面的,只返回一组有限的实际域对象。为了寻找更好的方法,我开始在 IQueryable
public static IQueryable<Contact> FirstNameStartsWith(
this IQueryable<Contact> contacts, String prefix)
{
return contacts.Where(
contact => contact.FirstName.StartsWith(prefix));
}
现在我可以做一些事情了
ContactRepository.GetAll().FirstNameStartsWith("tex").YoungerThanBirthYear(1960);
但是,我发现自己在编写扩展方法(并且到处发明诸如 ContactsQueryableExtensions 之类的疯狂类,并且由于将所有内容都放在适当的存储库中,我失去了“良好的分组”。
这真的是这样做的方法,还是有更好的方法来实现相同的目标?
【问题讨论】:
标签: c# .net extension-methods repository-pattern iqueryable