asp.net MVC:将查询字符串作为字符串或单个参数传递?
问题描述:
在asp.net MVC我有我的控制器中的搜索行动,我试图决定我是否应该通过查询到我的仓库作为一个字符串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));
}
我在网上看到的很多例子都使用查询字符串方法,但对我来说它并不感觉“安全”,尽管当你有一堆参数传入时它会更容易处理。关于更好的方法来达成共识?
答
我都肯定会建议与第二条路线去。没有必要将您的控制器与您的存储库连接起来。让您的存储库负责获取数据,它不应该对查询字符串进行任何类型的解析。这不是它的工作。让控制者处理。
答
个人而言,我更喜欢没有存储库承担解析查询字符串的责任。从关注点分离的角度来看,我认为存储库应该保持与实现无关。例如,为单元测试创建查询字符串比直接使用参数调用方法更麻烦。这就是说,我也更喜欢将控制器与界定明确的服务接口,因为它有助于保持控制器更轻,以我的经验。我尝试让服务充当存储库的入口,虽然没有要求这样做。根据调用的目的是什么,我将传入一个存储库(或者更可能是服务)有两件事 - 一组参数,就像您在第二个示例中给出的那样,或者作为构造的域对象,如果适用。
这似乎是最干净的方法,我在别处使用模型绑定我不太确定为什么我不认为在这种情况下使用它。谢谢! – 2009-07-21 17:19:33