为什么Spring MVC被称为MVC框架,而实际上它并不是MVC框架?

3

MVC描述了当使用Observer模式时,模型通知视图更改的情况。

这不是Spring MVC的工作方式。

Spring MVC是一个Model2框架,因为它不会从模型中通知视图 - 控制器只是将模型数据传递给视图并执行HTML生成。

那么为什么称其为“Spring MVC”?


2
你对MVC的概念太小了;你把它限制在一种特定的实现方式(大概是Swing)上。MVC是一种架构模式,规定了模型、视图和控制器之间的关注点分离,并且有许多不同的实现方式,其中很多不使用观察者模式。你引用的文章甚至指出Model 2设计通常与MVC架构相关联。 - tvanfosson
确实,Model 2经常与EJB相关联,但这并不意味着要使用EJB才能拥有Model 2。不过,我认为您说得对,我可能对MVC的理解过于狭隘了。 - arezzo
tvanfosson是正确的,但我可以理解你为什么会有这样的理解关于MVC Michael(即模型必须具有某种回调机制来告诉视图它该更新了),因为我读过无数次将MVC以那种方式呈现的演示文稿/文章(而且都是错误的)。我猜这只是一些人过度架构化的需求罢了... - Shivan Dragon
2个回答

8
观察者在MVC中并非必需品——视图如何更新取决于具体实现。控制器可以直接告诉视图进行渲染,或者视图可以请求进行新的渲染,这是几乎所有面向Web的MVC框架所发生的情况。
话虽如此,虽然大多数面向Web的MVC框架是对MVC原始思想的解释,但它们仍然相当于MVC,因为它们具有组件分离,并作为其同步版本运行。

+1 对于“解释”的使用非常恰当。好的论点。 - arezzo

0

MVC是一种设计模式,其中包括视图、模型和控制器。关于视图如何在模型更改时更新自身,没有特定的声明说应该从视图到模型使用观察者模式。视图主动重新查询模型以更新自身符合MVC规范。

Model2是MVC设计的一种实现方式。这是Java EE团队发布的东西(还有不符合MVC标准的Model1)。简而言之,虽然Model1表示您只在一侧(bean)上有模型分离,而在另一侧(由JSP页面表示的视图和控制器)上有视图加控制器,但在Model2范例中,您将JSP作为视图,bean作为模型,servlet作为控制器。

Spring-MVC被称为Spring-Model2,因为Model2与特定的Java EE组件(如servlet、JSP和bean)相关,而Spring-MVC涵盖的不仅仅是这些:控制器不是servlet,视图可以是除JSP之外的其他内容等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接