首页 > 解决方案 > 在 MVC 模式中,模型可以交互/修改视图吗?

问题描述

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

模型负责管理应用程序的数据。它接收来自控制器的用户输入。视图意味着以特定格式呈现模型。控制器响应用户输入并在数据模型对象上执行交互。控制器接收输入,可选地对其进行验证,然后将输入传递给模型。

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

在此处输入图像描述

我们可以看到 Model确实 与 View 交互并且能够修改它,但它没有任何意义。模型不更新控制器,更新视图吗?

我错过了什么?

标签: javamodel-view-controllerdesign-patternssoftware-design

解决方案


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

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

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

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

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

相关:当视图不与模型交互时是 MVC 吗?


推荐阅读