【问题标题】:Get data in controller using context or create method?使用上下文或创建方法在控制器中获取数据?
【发布时间】:2012-12-07 06:41:08
【问题描述】:

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

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

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

或直接使用上下文:

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

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

【问题讨论】:

  • 取决于您的实现或您希望如何分离关注点。如果您遵循存储库模式并可能使用 IoC 容器,则第一个很好。
  • 第二个如果你将它编程到一个接口,将允许对一个模拟上下文进行简单的单元测试,而不是单元测试你的控制器。我认为这是一个加分项。

标签: c# asp.net-mvc entity-framework


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多