为啥模型在MVC模式中直接更新视图?

Posted

技术标签:

【中文标题】为啥模型在MVC模式中直接更新视图?【英文标题】:Why does the model directly update the view in the MVC pattern?为什么模型在MVC模式中直接更新视图? 【发布时间】:2019-02-16 01:20:40 【问题描述】:

我一直在学习如何使用 Laravel 和 Vue.js 构建 Web 应用程序,并且我了解用户使用视图向控制器发送请求的部分,然后控制器操作模型。我绝对在我的应用程序中看到了这种流程。

我不太确定的是为什么在像这样的 MVC 图中:MVC pattern diagram from Wikipedia。模型直接更新视图,但在我的应用程序中,控制器似乎是从模型获取更改并将其发送到视图(通过 HTTP)的控制器。

有什么我不太明白的地方吗?

【问题讨论】:

关于"...用户使用视图来发送请求..."。您正在使用浏览器,而不是任何视图。您只是在“使”浏览器向服务器发送请求(通过键入 URL 并按 Enter,或通过触发 ajax 请求,或通过单击 submit按钮等)。然后由控制器处理任何此类请求。而且,相对于控制器,浏览器是用户,而不是你。 @dakis 哦,这就是为什么图表说用户正在“使用”控制器并“看到”视图的原因。确实花了很长时间才得到你写的东西,但它完全值得一遍又一遍地阅读。 是的,就是这样。请注意三点: 1)MVC中的“V”就是所谓的表示层。它可以是 view 类,但也可以由 presenterview 类等组成。 2) 模型,例如MVC 中的“M”是一个层。并由多个特定类组成:实体、数据映射器、存储库、服务。 3)图表混乱。在 Web MVC 中,模型不会更新任何视图! 模型应该对外部世界一无所知。 改为:(a) 控制器更新 model 然后从中读取数据,以便进一步将其传递给 view 进行显示它;或 (b) 控制器更新 模型view 然后读取 数据并显示它。应该选择 (b) 选项,即使框架正在使用选项 (a)。 这里有一些带有扩展解释的链接:this、this、this、this,也许还有this。 【参考方案1】:

在此图中,视图是模型的表示。当模型更改视图更改以表示模型。在真正的 MVC 应用程序中,控制器可能会将模型发送到视图(此模型称为 view-model,它是一种特殊类型的模型,它可以由控制器使用后端模型动态填充)。一些 MVC 应用程序有两种类型的模型:模型(可能是后端的数据库)和模型(称为视图模型,用于表示并将发送到视图)。例如 ASP.NET MVC 就有这种类型的视图模型。

What is ViewModel in MVC?

https://en.wikipedia.org/wiki/Model–view–viewmodel

【讨论】:

并不是我期待的答案,但哇,这让我意识到了一些事情。这意味着我可以为视图创建类,甚至可以扩展(通过组合或继承)这些类。哇!真的从来没想过。这就是 Laravel Nova 的结构,通过 View Models。非常感谢,巴曼!

以上是关于为啥模型在MVC模式中直接更新视图?的主要内容,如果未能解决你的问题,请参考以下文章

MVC模式

MVC模式

15.MVC/业务代表模式

菜鸟笔记:MVC 模式

设计模式MVC模式

设计模式(26)-MVC 模式