在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));
}
我在网上看到的很多例子都使用查询字符串方法,但对我来说它并不觉得“安全”,即使你有一堆参数要传递时更容易处理。对于更好的方法,是否存在普遍的共识?
答案 0 :(得分:2)
答案 1 :(得分:2)
就个人而言,我更喜欢不让存储库承担解析查询字符串的责任。从关注点分离的角度来看,我觉得存储库应该保持与实现无关。例如,必须为单元测试创建查询字符串比直接使用参数调用方法更麻烦。
话虽如此,我也更喜欢控制器与定义明确的服务接口,因为根据我的经验,它有助于保持控制器更轻。我尝试让服务充当存储库的网关,尽管没有要求这样做。我将把两件事传递到存储库(或者更可能是服务),这取决于调用的目的是什么 - 一组参数,就像你在第二个例子中给出的那样,或者作为构造的域对象,如果适用的话。
答案 2 :(得分:1)
我绝对建议选择第二条路线。您无需将控制器与存储库耦合。让您的存储库负责获取数据,它不应该对查询字符串进行任何类型的解析。那不是它的工作。让控制器处理。