当我在寻找数据时,例如:
- 查找一个以XYZ开头的联系人 - 查找一个生日在1960年之后的联系人 - 等等
我开始实现仓库方法,例如 `FirstNameStartsWith(string prefix)` 和 `YoungerThanBirthYear(int year)`,基本上是按照众多示例的做法。
然后我遇到了一个问题 - 如果我必须结合多个搜索条件怎么办?我的每个仓库搜索方法(如上所述)只返回一个有限的实际领域对象集。为了寻求更好的方法,我开始在IQueryable<T>上编写扩展方法,例如:
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 这样的疯狂类),失去了将所有内容放在适当仓库中的“良好分组”。
这是真正的做法吗?还是有更好的方法来实现相同的目标?