仓库方法 vs. 扩展IQueryable
- 论坛
- 仓库方法 vs. 扩展IQueryable
21 浏览
仓库方法 vs. 扩展IQueryable
我有一些仓库(例如ContactRepository,UserRepository等),它们封装了对领域模型的数据访问。
当我在搜索数据时,例如:
- 查找名字以XYZ开头的联系人
- 出生年份在1960年之后的联系人(等等)
我开始实现一些仓库方法,例如FirstNameStartsWith(string prefix)和YoungerThanBirthYear(int year),基本上遵循了许多现有的例子。
然后我遇到了一个问题 - 如果我必须组合多个搜索条件怎么办?我的每个仓库搜索方法(如上所述)只返回有限的一组实际领域对象。为了寻找更好的方法,我开始在IQueryable
public static IQueryableFirstNameStartsWith( this IQueryable contacts, String prefix) { return contacts.Where( contact => contact.FirstName.StartsWith(prefix)); }
现在我可以做像这样的事情:
ContactRepository.GetAll().FirstNameStartsWith("tex").YoungerThanBirthYear(1960);
然而,我发现自己在各处编写扩展方法(并发明了一些疯狂的类,例如ContactsQueryableExtensions),我失去了通过将所有内容放在适当的仓库中而获得的"良好分组"。
这样做真的是正确的方法吗?还是有更好的方法来实现相同的目标?