【问题标题】:Why do most ASP.NET MVC examples access the database directly in the presentation layer?为什么大多数 ASP.NET MVC 示例都直接在表示层访问数据库?
【发布时间】:2012-09-26 08:58:39
【问题描述】:

我找到的关于如何设置 ASP.NET MVC 项目的大多数(几乎全部?)示例都是直接在控制器中访问数据库上下文。

例如this

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/

    public ViewResult Index()
    {
        return View(db.Movies.ToList());
    }

我也知道有很多控件(至少对于aspx视图引擎来说)可以直接绑定到数据库中的一个表作为数据源,让它自动显示数据。

对我来说,这感觉很奇怪,我希望在表示层和数据库之间进行某种分离。在视图中使用它们之前,将数据从数据库映射到视图模型的某种业务层和/或数据层。只是我还是这些例子都是这样的,因为它更容易做到?我错过了一些巨大的收获吗?我想它有点快,但感觉就像我不应该在我的数据库中使用与我的视图中相同的模型。我终于找到了感觉更正确的an example,其中数据库模型与视图模型是分开的。但它只是一百个例子。

您对此有何看法?

【问题讨论】:

  • 好吧,我想说...因为它们是 MVC 示例。他们背后的想法和动机只是简单地说什么是 MVC,什么不是。
  • 如果你想学习MVC,你很可能会找到类似的例子。如果您想学习如何与多个层中的对象交互(如何编写应用程序架构),那么您应该明确地谷歌它。
  • 控制器不是表现层​​,视图是表现层。
  • 谨防 Hello World 示例!
  • 示例来自一个非常基础的 ASP.NET MVC4 教程,"Accessing Your Model's Data from a Controller"

标签: c# asp.net asp.net-mvc-3 razor


【解决方案1】:

我理解您的担忧,因为我也有同样的担忧。很遗憾,大多数示例都没有使用视图模型。因此,当人们开始实现与那些文章中最琐碎的示例不同的实际应用程序时,他们会遇到很多困难。

就直接从控制器访问数据库而言,我认为这不是一个大问题。如果您不需要它们并且它们不会为您的应用程序带来任何额外的价值,那么您真的不需要实现很多抽象层。 Jimmy Bogard 写了一封 excellent blog post 关于限制抽象的主题。

【讨论】:

    【解决方案2】:

    大多数 MVC 教程教你如何做只是因为它可以做到,而且对 Controller 的解释通常在解释 Model 之前。

    以Movie App教程为例-http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3

    这些教程中的大多数首先教您如何在视图上显示数据,然后使用控制器在视图中显示,然后将数据输入模型并通过指向视图。控制器。

    【讨论】:

    • 最大的问题是作者写的大部分文章只是为了解释这个概念而忘记解释如何在现实世界的应用程序中实现这个概念(即使我有时也会这样做)。原因很明显..写这样的文章需要经验和时间。
    • @Mark 我同意,可惜现在是这样。
    【解决方案3】:

    这是为了使示例保持简单并专注于手头的主题。

    【讨论】:

    • 我觉得应该是评论
    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2011-06-04
    • 2013-06-21
    • 1970-01-01
    • 2012-05-12
    • 2015-03-30
    • 2016-04-07
    相关资源
    最近更新 更多