java - 在 MVC 模式中,模型可以交互/修改视图吗?
问题描述
MVC 模式组件交互在 Wikipedia 上是这样描述的:
模型负责管理应用程序的数据。它接收来自控制器的用户输入。视图意味着以特定格式呈现模型。控制器响应用户输入并在数据模型对象上执行交互。控制器接收输入,可选地对其进行验证,然后将输入传递给模型。
我了解视图不应与模型交互。但是在我在网上找到的大多数图表中,MVC 是这样表示的:
我们可以看到 Model确实 与 View 交互并且能够修改它,但它没有任何意义。模型不更新控制器,更新视图吗?
我错过了什么?
解决方案
MVC 架构创建于 1970 年代。显然当时没有互联网。在原始版本中,Model 通过数据绑定直接更新 View ,也称为发布/订阅,也称为观察者模式。
Gang of Four Design Patterns 这本书详细描述了这种 MVC 架构。那本书的一些引述在这里的另一个答案中。
MVC 架构非常流行,当互联网出现时,开发人员希望继续使用它;但它不适合客户端/服务器应用程序。因此诞生了“WebMVC”,这是您今天最常见的版本。WebMVC 通常被实现为分层架构,而原来的架构并非如此。
当这两种架构混为一谈时,就会出现混乱。通常两者都简称为 MVC。更糟糕的是,MVP、MVVM等相关架构都可以称为MVC。
就个人而言,我觉得桌面 MVC 和 Web MVC 之间的关系有点像 Java 和 JavaScript 之间的关系。后者捎带了前者的著名名称,以实现明显不同的东西。
推荐阅读
- c# - Application.ActiveWindow.Selection.ShapeRange 未选择任何内容时抛出异常
- javascript - 用于绘制 Visual Studio 图表的 XML 数据
- python - 运行 fit_generator 时无法理解“IndexError: tuple index out of range”的原因
- python - 有没有办法将 python 依赖项添加到柯南包
- laravel - 在服务器端或前端分页更好吗?
- jsfl - jsfl:访问符号以在其中设置动画
- java - 地图中的 Java 枚举使用
- javascript - 如何在 TensorFlow.js 中将 optimizer.minimize 与 maxPooling 层一起使用
- reactjs - 如何将 React 组件的 props 传递给样式化组件
- shell - 如何在 Circle CI 中设置环境变量