我正在为互联网用户提供一些服务的互联网网站上工作。所以我们有一个管理系统,我的业务团队的合作者可以在其中获得他们想要的信息,例如最近 3 天内注册了多少新用户?或者发表了多少带有“笑话”标签的文章等。因此在管理系统中,有几个页面用于搜索一些带有条件的表格。这些页面非常相似:
用户ID:[--------------] 昵称关键字:[------------] 注册时间:[BEGIN]~[END] [搜索]
搜索结果在此处列出
该类User
具有更多的属性,而不仅仅是 UserID/Nick/RegisterTime(以及用户表),但只有 3 个属性被视为条件。所以我有一个UserSearchCriteria
像这样的课程:
public class UserSearchCriteria
{
public long UserID { get; set; }
public string NickKeyword { get; set; }
public DateTime RegisteredTimeStart { get; set; }
public DateTime RegisteredTimeEnd { get; set; }
}
然后在数据访问层,search 方法接受一个带有其类型的参数UserSearchCriteria
,并构建对应Expression<Func<User, bool>>
的查询。而在DAL之外,其他开发者只能通过条件提供的3个条件搜索用户表,例如,他们无法搜索City
属性为“纽约”的用户(这通常是因为该属性在DB,用它搜索很慢)。
问题1:这种封闭搜索的实现是否正确?有什么建议么?
问题2:现在我在项目中发现了更多的标准类,比如ArticleSearchCriteria
,FavouriteSearchCriteria
等等,我认为未来标准会越来越多。它们具有几乎相同的工作机制,但我需要重复代码。有更好的解决方案吗?
PS如果你需要这些信息:jQuery + ASP.NET MVC 3 + MongoDB