【发布时间】:2012-05-04 16:22:08
【问题描述】:
我正在开发一个为互联网用户提供一些服务的互联网网站。所以我们有一个管理系统,我的业务团队的合作者可以在其中获得他们想要的信息,例如过去 3 天有多少新用户注册?或者发表了多少带有“笑话”标签的文章等。因此在管理系统中,有几个页面用于搜索一些带有条件的表格。这些页面非常相似:
UserID:[-------------] Nick Keyword:[------------] 注册时间:[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 属性为“纽约”的用户(这通常是因为该属性有数据库中没有索引,用它搜索很慢)。
问题一:这种封闭搜索的实现是否正确?有什么建议吗?
问题2:现在我在项目中发现了更多的标准类,比如ArticleSearchCriteria,FavouriteSearchCriteria等等,我认为未来标准会越来越多。它们具有几乎相同的工作机制,但我需要重复代码。有没有更好的解决方案?
P.S.如果你需要这些信息:jQuery + ASP.NET MVC 3 + MongoDB
【问题讨论】:
标签: c# asp.net-mvc-3 data-access-layer business-logic-layer