java - 在 MVC 模式中,模型可以交互/修改 View 吗?

标签 java model-view-controller design-patterns software-design

MVC 模式组件交互在 Wikipedia 上是这样描述的:

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.



我了解 View 不应与模型交互。但是在我在网上找到的大多数图表中,MVC 是这样表示的:

enter image description here

我们可以看到型号 与 View 交互并能够对其进行修改,这没有任何意义。
不是吗?型号 更新 Controller ,更新 查看 ?

我错过了什么?

最佳答案

MVC 架构创建于 1970 年代。显然当时没有互联网。在原始版本中,Model 通过数据绑定(bind)直接更新 View,也称为发布/订阅,也称为观察者模式。

Gang of Four Design Patterns 这本书详细描述了这种 MVC 架构。那本书的一些引述在另一个答案here .

MVC 架构非常流行,当互联网出现时,开发人员希望继续使用它;但它不适合客户端/服务器应用程序。因此诞生了“WebMVC”,这是您今天最常见的版本。 WebMVC 通常被实现为分层架构,而原来的架构并非如此。

当这两种架构混为一谈时,就会出现困惑。通常两者都简称为 MVC。更糟糕的是,MVP、MVVM等相关架构都可以称为MVC。

就个人而言,我觉得桌面 MVC 和 Web MVC 之间的关系有点像 Java 和 JavaScript 之间的关系。后者捎带了前者的著名名称,以实现明显不同的东西。

相关:Is it MVC when the view doesn't interact with the model?

关于java - 在 MVC 模式中,模型可以交互/修改 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53703012/

相关文章:

java - 如何在新的 webview 窗口中打开扫描的链接 AndroidStudio Zxing

java - 如何在数组列表的范围内找到最大值或最小值?

java - Android Open GL ES z 缓冲区无法在 GL_POINTS 上工作(?)

model-view-controller - View 层的 'getters and setters are evil' 是否失败?

c# - 我们如何通过在 asp.net MVC 6 中实现异步 Controller 来实现性能?

php - 什么是 "real"MVC 模式?

java - 如何衡量 Java 程序的性能?

java - Spring Boot中的一个简单的REST项目是否使用了MVC原理?

design-patterns - 演示模型与被动 View

javascript - 单页应用程序架构 (JavaScript)