MVC - 它是模型到视图还是控制器到视图?

19

我看到了很多关于如下示例所示的观点,即视图从模型中更新mvc 。然而,我看到了一些其他的MVC架构示例,显示视图是通过控制器更新的enter image description here

这取决于您是否在视图中使用@Model吗?我只是想知道为什么有不同版本的MVC,我们被教导应该是第二个图像。


第一个图并不完全正确..它应该是用户请求 -> 控制器处理 -> 操作模型 -> 控制器处理 -> 发送到视图。因此,控制器基本上就像是将模型与视图连接起来的中间人。 - Desolator
首先,第一张图片清晰地展示了Model-View-Controller的工作流程。但是,在这里,Model和View之间直接通信。而第二张图片则不然,除了一个问题:“View是否与Model相关?”答案是肯定的。 - Vivek Ranjan
1
我也曾这样想,但在看到更多与第一个图表类似的设计模式的文章后,我开始怀疑了。除非第二个图表是MVP,P代表Presenter? - Matchbox2093
看起来你困惑于"MVC"和"MVVM"之间。 - d33j
@RobinVanPersi 关于“第一个图示并不完全正确”的问题 - 我注意到它是维基百科MVC页面上目前唯一的图示,这为第一个图示增加了合法性。 RobinVanPersi - 你是否愿意回答这个问题,并给出参考资料,说明你为什么认为“第一个图示并不完全正确”? - null
显示剩余2条评论
1个回答

16

MVC是一种定义不太明确的模式,它赋予了架构师许多实现细节的自主权。这也可能是为什么存在如此多变体MVC的原因。

据我所知,一切都始于最初的Classic MVC(经典MVC),将Web应用程序分为三个部分:Model(模型)、View(视图)和Controller(控制器)。目标是:

  • 实现Model和View之间的松耦合(使用观察者模式来实现)。
  • 将业务逻辑封装到Model中,以便可以进行详尽的测试。
  • 使View尽可能愚笨/轻薄,以减少对其进行测试的需求。

标准MVC交互

该模式迷住了许多人,因此产生了几种变体(Active Model、Passive Model、Model2)。这些变体是由于在特定框架中实现该模式以适应框架设计目标而产生的。

例如,一种变体是Model2。 Model2是Web版本(Classic MVC实际上是针对桌面应用程序的),并且作为“ASP.NET MVC框架”而广受欢迎。

在ASP.NET MVC框架中的Model2交互

Classic MVC和ASP.NET MVC框架之间的关键区别在于,后者提供了Model和View之间的清晰分离,即没有直接交互。相反,Controller负责在ASP.NET MVC框架中促进Model和View之间的通信。这使得ASP.NET MVC框架Web应用程序更容易和高效地进行测试。

此外,在Model2中可以建立一种松散的契约,该契约可以在视图和控制器之间建立。在ASP.NET MVC框架中,此契约曾经由ViewData容器对象表示,现在使用ViewModel对象表示。

为避免混淆,需要查看当前正在使用的MVC模式实现中这三个部分(Model、View和Controller)之间的交互。同时要认识到它是MVC模式的一个特定实现,一个图表可能无法完全描述它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接