【问题标题】:MVC architecture control flowMVC架构控制流
【发布时间】:2017-11-07 18:49:51
【问题描述】:

我有点困惑这三个组件——模型、视图、控制器——在 MVC 架构中是如何相互交互的。有时我觉得我知道 MVC 是如何工作的,有时我觉得我不知道它的内部是否正常工作。

我对 MVC 架构的了解是 -

  1. 无论是URL,Controller都会拦截用户请求
    请求或用户在页面上提出的任何事件。
  2. 然后控制器处理用户输入并与模型对话。
  3. 模型准备数据并发送回控制器。
  4. 最后,控制器将数据交还给视图并显示给用户。

在我看来,View 从不直接与模型对话。 View 和 Model 之间的交互将仅由 Controller 处理

到目前为止一切顺利!

但是当我看到下面的图表时,我会感到困惑。在下图中,左箭头表示 View 组件也可以与 Model 组件交互。

thiscode-project 的文章中也写到“A model is accessible by both controller and view”和“a view can use model to display data”。

所以请澄清一个模型是只能由控制器访问还是控制器和视图都可以访问。如果第二个也是正确的,那么在什么情况下这是可能的。我在 ASP.NET MVC 框架上工作,这里的任何交互都是通过控制器对象完成的。我从未遇到过视图直接与模型对象对话的情况。

【问题讨论】:

标签: asp.net-mvc design-patterns model-view-controller architecture


【解决方案1】:

如果视图是强类型的任何模型,那么我们可以说

查看=> 模型

如果视图不是用模型强类型化的,那么我们可以说

控制器=>模型=>视图

【讨论】:

    【解决方案2】:

    有 MVC(模式)和 MVC(由 Microsoft 开发的 Web 应用程序框架,并以该模式命名令人困惑,因此最好将这两者分开讨论。

    在 MVC 模式中,您会发现以下内容:

    • 模型 - 包含应用程序的所有业务逻辑,包括如何通过数据库查询或其他方法“构建”自身的逻辑。
    • 视图 - 为 UI 提供模型的表示
    • 控制器 - 将模型连接到视图

    在 MVC 中,Web 应用程序框架:

    • 型号 - 没有。更恰当地说,模型可能是一个或多个实体类、一个 DAL 层和一个或多个视图模型的某种组合。
    • 视图 - 几乎与 MVC 相同,模式
    • Controller - 将模型连接到视图,但也承担了更多的责任。可能负责从数据库中查询实体、映射到视图模型、为视图创建组件等。

    尽管名称如此,MVC 框架只是松散地实现了 MVC 模式。但是,在这两者中,控制器和视图都可以访问模型,因此您对那里的基本理解存在缺陷。但是,在 MVC 框架的情况下,您可以说视图只能访问视图模型。由于 MVC 框架中的“模型”不仅仅是一个东西,还有一些组成部分不应该被视图访问,即:DAL 层和潜在的实体,除非实体作为视图模型执行双重职责,也是。

    【讨论】:

    • 关于 MVC 模式,您在要点中提到过 - 视图为 UI 提供了模型的表示。这个模型通过控制器连接到视图(我相信)。在上一段中,您提到框架和模式都可以访问模型。您的意思是说视图可以使用控制器访问模型吗?如果是,则无法通过视图直接访问模型?
    • 没有。视图直接与模型交互。控制器将模型提供给它,然后控制器就消失了。
    • 好的。假设有一个 Product Detail View 并且相应的控制器创建一个 ProductDetail Model 对象并将其交给视图进行渲染。在这种情况下,我们可以说 View 正在与 Model 进行通信。而如果控制器只返回Model对象的投影(ViewModel),那么我们可以说View并没有直接与Model通信。克里斯,我说得对吗?
    • 好吧,根据那个术语,是的,但是术语不正确,这就是我试图传达的内容。你所谓的“模型”实际上是一个“实体”。就视图而言,大 M 模型是您的视图模型。就像我说的,MVC 框架没有真正的模型。在控制器中,模型将是实体、用于从数据库中检索实体的逻辑以及您将其映射到的视图模型的组合。然而,视图只能看到视图模型片段。
    • 好的。因为模型包含数据以及与被建模的业务领域相关的业务规则。因此视图可以直接在控制器对象中访问模型中定义的业务规则。这就是你想要沟通的?如果部分正确,那么您能否提供一个描述视图和模型通信的示例。
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2013-12-28
    • 2023-03-21
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2013-12-06
    • 2014-02-13
    相关资源
    最近更新 更多