在 MVC 模式中,模型可以交互/修改视图吗?
In MVC pattern, can the Model interact / modify the View?
维基百科上是这样描述 MVC 模式组件交互的:
The model is responsible for managing the data of the application. It
receives user input from the controller. The view means presentation
of the model in a particular format. The controller responds to the
user input and performs interactions on the data model objects. The
controller receives the input, optionally validates it and then passes
the input to the model.
我了解视图不应与模型交互。但是在我在网上找到的大部分图表中,MVC是这样表示的:
我们可以看到模型确实与视图交互并且能够修改它,这没有意义。
Model 不更新 Controller,更新 View 吗?
我错过了什么?
不可以,不能直接用model访问view,必须先访问controller
作为其 MVC 模式
图表 - 价值一千字!图表中使用的精确词语和上下文可能无法讲述实现的故事,比如在 Microsoft MVC 5/6 中。
用户与控制器进行交互。不是视图也不是模型。调用控制器上的操作将 return 某些东西(视图、文件、重定向等)。
在 return 查看信息的情况下,控制器在计算出用户请求的数据后可以检索符合请求的模型,将其传递到视图中,然后 return该模型的查看结果。
在上图中,不清楚控制器是否充当将模型移动到视图中的代理。模型不决定视图。为什么?根据模型中的内容 returned 控制器,可能会 returned 不同的视图。这就是控制器恰当命名的原因。它位于决策和移动对象的事务中心。
因此,您缺少的是有关 MVC 过程在实施时如何发生的一些背景信息
MVC 架构创建于 1970 年代。显然那时候还没有互联网。原版中,Model通过data binding直接更新View,也称为publish/subscribe,也称为观察者模式.
四种设计模式一书详细描述了这种 MVC 架构。另一个答案 here.
引用了那本书中的几句话
当时MVC架构很流行,互联网出现后,开发者想继续使用它;但它不太适合 client/server 应用程序。因此诞生了 "WebMVC",您今天最常见的版本。 WebMVC 通常实现为分层架构,而原来的架构不是。
当两种架构混为一谈时,就会产生混乱。通常两者都简称为 MVC。更要命的是,MVP、MVVM等相关架构都可以称为MVC
就我个人而言,我发现桌面 MVC 和 Web MVC 之间的关系有点像 Java 和 JavaScript 之间的关系。后者借用了前者的著名名称,实现了截然不同的东西。
相关:Is it MVC when the view doesn't interact with the model?
维基百科上是这样描述 MVC 模式组件交互的:
The model is responsible for managing the data of the application. It receives user input from the controller. The view means presentation of the model in a particular format. The controller responds to the user input and performs interactions on the data model objects. The controller receives the input, optionally validates it and then passes the input to the model.
我了解视图不应与模型交互。但是在我在网上找到的大部分图表中,MVC是这样表示的:
我们可以看到模型确实与视图交互并且能够修改它,这没有意义。 Model 不更新 Controller,更新 View 吗?
我错过了什么?
不可以,不能直接用model访问view,必须先访问controller 作为其 MVC 模式
图表 - 价值一千字!图表中使用的精确词语和上下文可能无法讲述实现的故事,比如在 Microsoft MVC 5/6 中。
用户与控制器进行交互。不是视图也不是模型。调用控制器上的操作将 return 某些东西(视图、文件、重定向等)。
在 return 查看信息的情况下,控制器在计算出用户请求的数据后可以检索符合请求的模型,将其传递到视图中,然后 return该模型的查看结果。
在上图中,不清楚控制器是否充当将模型移动到视图中的代理。模型不决定视图。为什么?根据模型中的内容 returned 控制器,可能会 returned 不同的视图。这就是控制器恰当命名的原因。它位于决策和移动对象的事务中心。
因此,您缺少的是有关 MVC 过程在实施时如何发生的一些背景信息
MVC 架构创建于 1970 年代。显然那时候还没有互联网。原版中,Model通过data binding直接更新View,也称为publish/subscribe,也称为观察者模式.
四种设计模式一书详细描述了这种 MVC 架构。另一个答案 here.
引用了那本书中的几句话当时MVC架构很流行,互联网出现后,开发者想继续使用它;但它不太适合 client/server 应用程序。因此诞生了 "WebMVC",您今天最常见的版本。 WebMVC 通常实现为分层架构,而原来的架构不是。
当两种架构混为一谈时,就会产生混乱。通常两者都简称为 MVC。更要命的是,MVP、MVVM等相关架构都可以称为MVC
就我个人而言,我发现桌面 MVC 和 Web MVC 之间的关系有点像 Java 和 JavaScript 之间的关系。后者借用了前者的著名名称,实现了截然不同的东西。
相关:Is it MVC when the view doesn't interact with the model?