在MVC模式中,模型可以交互/修改视图吗?

时间:2018-12-10 09:45:42

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

在Wikipedia上以这种方式描述了MVC模式组件的交互:

  

模型负责管理应用程序的数据。它   从控制器接收用户输入。 视图表示演示   以特定格式显示的模型。控制器响应   用户输入并在数据模型对象上执行交互。   控制器接收输入,可选地对其进行验证,然后传递   模型的输入。

我知道View应该不能与Model交互。但是在我在网上找到的大多数图中,MVC都是这样表示的:

enter image description here

我们可以看到模型确实与View交互并且能够对其进行修改,但这没有任何意义。 模型是否不会更新用于更新视图控制器

我想念什么?

3 个答案:

答案 0 :(得分:5)

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

《四个设计模式的帮派》一书详细描述了这种MVC体系结构。该书中的一些引语在另一个答案here中。

MVC架构非常流行,当Internet出现时,开发人员希望继续使用它。但它不适用于客户端/服务器应用程序。这样就诞生了“ WebMVC”,这是您今天最常见的版本。 WebMVC通常实现为分层体系结构,而原始体系结构则不是。

将两种体系结构混合在一起时会产生混乱。通常两者都简称为MVC。更糟糕的是,诸如MVP和MVVM之类的相关架构可以称为MVC。

我个人发现,桌面MVC和Web MVC之间的关系有点像Java和JavaScript之间的关系。后者背负着前者的著名名称,以实现截然不同的东西。

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

答案 1 :(得分:1)

否,您不能直接访问模型视图,必须先访问控制器 作为其MVC模式

答案 2 :(得分:1)

图-值一千字!在Microsoft MVC 5/6中,图表中使用的精确词和上下文可能并不能说明实现的故事。

用户与控制器的交互。不是视图,也不是模型。在控制器上调用动作将返回一些内容(视图,文件,重定向等)。

在返回信息视图的情况下,控制器计算出用户正在请求的数据后,可以检索适合该请求的模型,将其传递到视图中,然后返回该模型的视图结果。 / p>

在上图中,尚不清楚在将模型移入视图时,控制器是否充当了代理。模型不会决定视图。为什么?根据返回控制器的模型中的内容,可能会返回不同的视图。这就是为什么要恰当地命名控制器的原因。它位于事务的中心,用于决策和移动对象。

因此,您缺少的是有关实施MVC的过程的一些背景信息