4

以下哪一项是正确的,或者至少是最好的:

创建一个在控制器中检索数据的方法:

public ActionResult Index()
{
    var list = _context.MyClass.Take(10);
    return View(list);
}

或直接使用上下文:

public ActionResult Index()
{
    var list = MyClass.MethodWrapperToGet(10);
    return View(list);
}

我对第一个问题的担心是数据库过于暴露;让开发人员很容易误用。

4

2 回答 2

0

理想情况下,您使用公开 _context 的变体,您可以通过依赖注入传递该上下文,以便您可以对控制器进行单元测试。

静态调用很难测试,至少在 .Net 中是这样

于 2012-12-20T18:17:21.167 回答
0

这实际上取决于您的项目的大小。对于小型或快速原型,我会选择控制器DbContext直接访问的选项。

public ActionResult Index()
{
    var list = _context.MyClass.Take(10);
    return View(list);
}

我个人更喜欢分开音乐会。换句话说,我将创建一个服务类,将控制器所需的数据准确地传递给控制器​​。请记住,Controller 不应该知道如何执行任务,而是应该知道what 之后需要执行什么

当然,这并不意味着您必须实现存储库模式。DbContext如果您愿意,您的服务类可以直接访问。

于 2012-12-19T20:22:45.630 回答