代码之家  ›  专栏  ›  技术社区  ›  Graham Conzett

asp.net MVC:将查询字符串作为字符串传递,还是将单个参数传递?

  •  3
  • Graham Conzett  · 技术社区  · 17 年前

    在asp.net MVC中,我的控制器中有一个搜索操作,我正在尝试决定是否应将查询作为字符串传递到存储库

    public ActionResult Search(string query)
    {
        return View(_repository.ListPeople(query));
    }
    

    public ActionResult Search(string FirstName, string LastName, System.Nullable<byte> Education)
    {
        return View(_repository.ListPeople(FirstName, LastName, Education));
    }
    

    我在网上看到的很多示例都使用了查询字符串方法,但对我来说,它并不安全,即使当您需要传递一系列参数时,处理起来会更容易一些。对于更好的方法,是否有普遍共识?

    3 回复  |  直到 17 年前
        1
  •  2
  •   redsquare    17 年前

    我赞成模型装订。这样,如果您决定添加额外的搜索选项,则除了模型类之外,您无需进行任何更改。

    信息 here 和 here

        2
  •  2
  •   Joseph Ferris    17 年前

    就个人而言,我不希望存储库承担解析查询字符串的责任。从关注点分离的角度来看,我觉得存储库应该保持与实现无关。例如,必须为单元测试创建查询字符串比直接使用参数调用方法更麻烦。

    也就是说,根据我的经验,我更喜欢控制器与定义良好的服务接口,因为它有助于使控制器更轻。我尝试让服务充当到存储库的网关,尽管没有这样做的要求。根据调用的目的,我将向存储库(或者更可能是服务)传递两件事——要么是一组参数,就像您在第二个示例中给出的那样,要么是一个构造的域对象(如果适用)。

        3
  •  1
  •   BFree    17 年前

    我绝对建议走第二条路线。无需将控制器与存储库耦合。让您的存储库负责获取数据,它不必对查询字符串进行任何类型的解析。那不是它的工作。让控制器来处理这个问题。