ASP.NET MVC:作为字符串传递查询字符串还是单独参数?

3
在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个回答

2
我更倾向于使用模型绑定。这样,如果您决定添加额外的搜索选项,您只需更改模型类,而无需进行其他更改。
关于此内容的信息,请参见这里这里

这似乎是最干净的方法,我在其他地方使用了模型绑定,不太确定为什么我没有想到在这种情况下也使用它。谢谢! - Graham Conzett

2

就个人而言,我更倾向于不让存储库承担解析查询字符串的责任。从关注点分离的角度来看,我认为存储库应该保持实现无关性。例如,为单元测试创建查询字符串比直接使用参数调用方法更加繁琐。

话虽如此,我也更喜欢控制器与定义良好的服务进行交互,因为这有助于保持控制器更轻量级。我尝试让服务充当到存储库的网关,但并没有必要这样做。根据调用的目的,我将传递两个参数到存储库(或更可能是服务)-一组参数,就像您在第二个示例中提供的那样,或者如果适用,作为构造的领域对象。


1
我强烈建议选择第二个路线。没有必要将控制器与仓库耦合在一起。让您的存储库负责获取数据,不应该对查询字符串进行任何形式的解析。这不是它的工作。让控制器来处理这些事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接