我正在建立一个互联网网站,为互联网用户提供一些服务。所以我们有一个管理系统,我的业务团队的合作者可以从中获得他们想要的信息,例如:过去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; }
}
然后在数据访问层中,搜索方法接受一个类型为UserSearchCriteria
的参数,并构建相应的Expression<Func<User, bool>>
进行查询。在DAL之外,其他开发人员只能使用条件提供的3个条件搜索用户表,例如,他们无法搜索那些City
属性为“纽约”的用户(这通常是因为这属性在DB中没有索引,用它搜索很慢。
问题1:这种封闭搜索的实现是否正确?有什么建议吗?
问题2:现在我在项目中找到了更多的标准类,如ArticleSearchCriteria
,FavouriteSearchCriteria
等,我认为这些标准将来会越来越多。它们具有几乎相同的工作机制,但我需要重复代码。有更好的解决方案吗?
P.S。如果您需要以下信息:jQuery + ASP.NET MVC 3 + MongoDB
答案 0 :(得分:0)
对我来说很有意义。如果用户无法通过“任何东西”进行搜索,那么使用逐个模板的方法就没有任何意义。此外,如果你试图使这更通用,它将彻底混淆。例如,我不愿意编写类似的代码:
class SearchCriteria{
Dictionary<object,object> KeyValuePairs;
EntityKind Entity;
}
这样使用:
SearchCriteria sc = new SearchCriteria();
sc.KeyValuePairs.Add("UserId",32);
sc.Entity = EntityKind.User;
好恶。没有编译时类型检查,也没有检查实体和属性是否匹配等。
所以,我的答案是,是的:),我会使用你目前使用的设计模式。对我来说很有意义,而且对于任何人来说,看看你正在做什么并加快速度似乎很简单。