0

我正在为互联网用户提供一些服务的互联网网站上工作。所以我们有一个管理系统,我的业务团队的合作者可以在其中获得他们想要的信息,例如最近 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:现在我在项目中发现了更多的标准类,比如ArticleSearchCriteriaFavouriteSearchCriteria等等,我认为未来标准会越来越多。它们具有几乎相同的工作机制,但我需要重复代码。有更好的解决方案吗?

PS如果你需要这些信息:jQuery + ASP.NET MVC 3 + MongoDB

4

1 回答 1

0

对我来说很有意义。如果用户无法通过“任何内容”进行搜索,那么使用按模板搜索的方法就没有任何意义。此外,如果你试图让它更通用,它会变得非常混乱。例如,我不想编写如下代码:

class SearchCriteria{
   Dictionary<object,object> KeyValuePairs;
   EntityKind Entity;
}

像这样使用:

SearchCriteria sc = new SearchCriteria();
sc.KeyValuePairs.Add("UserId",32);
sc.Entity = EntityKind.User;

哇。没有编译时类型检查,没有检查实体和属性是否匹配等。

所以,我的回答是,是的 :),我会使用您当前使用的设计模式。对我来说很有意义,而且任何人都可以直接看到你在做什么并跟上进度。

于 2012-04-24T02:43:53.250 回答