MVC和MVC Model2的实际区别是什么?

10

我想知道MVC和MVC Model2在开发中的实际区别。


我相信这两个链接包含了你想要找到的实际信息:模型1模型2 - Artyom Sokolov
一个好的解释可以在以下网址中找到:http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html - VolkerK
2个回答

20

为了阐述之前的答案(并从这篇文章中添加解释):

MVC2是一种滥用语言,实际上是指JSP Model 2架构,而不是JSP Model 1:

服务器端Web开发的第一个Java技术是servlet
使用servlet编写应用程序与使用Perl编写CGI应用程序非常相似,因为所有输出都必须从Java代码内部构建为字符串
这非常繁琐且容易出错。这也使得没有Java经验的网页设计师难以修改由servlet生成的页面的外观和感觉。

alt text
(来源:javaworld.com

然后出现了JSP。像Microsoft ASP和流行的脚本语言PHP一样,JSP将所有内容视为模板文本,但允许在称为脚本和JSP表达式的标记中插入Java代码。这使人们可以像使用其他流行的脚本语言一样处理服务器端应用程序,但是它有一些缺点。
  • 没有关注点分离。
  • 一个脚本将包含数据库代码、业务逻辑、HTML标记以及任何用于最终页面呈现的javascript代码。
  • 代码重用和自动化测试都很困难。
这被称为“Model 1” JSP编程。 MVC或模型-视图-控制器模式是一种常见的GUI代码分离技术,由Trygve Reenskaug发明,用于Zerox的Smalltalk。 在某个时候,人们意识到可以将此技术调整为Java EE应用程序,以实现相同级别的分离。
这样做涉及将模型层编写为Bean或Plain Old Java Objects(POJO),使用servlet作为控制器,然后在完成所有繁重的工作后,转发到JSP以格式化和标记结果。
使用MVC体系结构编写的Servlet/JSP应用程序被称为Model 2 JSP编程。

alt text
(来源: javaworld.com)

因为这种模式在被应用于Servlet/JSP应用程序之前以不同的形式存在,所以有时被称为"MVC2"。这个名字导致了一些混淆,因为它暗示着Servlet应用程序有一个MVC1,而实际上没有。
只需说MVC即可。


@VonC - 直接复制而不提供参考并不是一个好主意。请在您的原始帖子中提供参考。谢谢。 - Adeel Ansari
2
@Vinegar:在没有阅读答案的情况下发表评论并不是一个好主意;)“并从这篇文章中添加解释”:复制的内容来自于第一行提到的那篇文章。 - VonC
那么这是否意味着MVC1是事件驱动的MVC,就像在Swing和传统的Smalltalk GUI中找到的那样?(MVC2不需要观察者,因为它正在响应Web请求,而Swing和Smalltalk都处理桌面客户端...因此它们需要在模型上进行回调以触发视图刷新) - Dafydd Rees

3
一个有趣的历史注释关于术语...
[我希望我能找到那篇论文...(我刚刚尝试谷歌搜索,但没有运气!)]
前一段时间,有人写了一篇论文,描述了两种用于Web应用程序的MVC方法。在其中,他有两个图。
标题是“模型1”和“模型2”。
它们并不意味着是实际的模式名称(更像是“图1”和“图2”),但有人读了并将其写成类似于模式名称的东西...
(有人有参考资料吗?)
VonC很好地描述了区别

有趣(+1)。我只是复制并重新格式化了javaworld文章。关于您的评论,这个演示文稿(http://www.javapassion.com/j2ee/MVCPatternAndFrameworks.pdf)确实提到了“MVC模型1”和“MVC模型2”!(但这可能是您论文的副产品,而不是您所引用的实际文档) - VonC
嗷,根据这个“答案解析”(http://csdl.ics.hawaii.edu/~johnson/613s05/613s05FinalAnswerKey.pdf),MVC模型“1”是面向客户端应用程序的,例如基于Swing的GUI应用程序。在这种情况下,所有的应用程序代码存在于单个JVM上的单个客户端上。 MVC模型“2”是面向客户端-服务器网络应用程序环境的,用户通过HTTP请求与服务器进行通信。与模型1相比,模型2的架构要求实现一个作为控制器的单个Servlet,接收来自客户端浏览器的所有请求。 - VonC
那个幻灯片演示很接近,但它将“Model 1/Model 2”称为实际术语... “Model 2”并不像他们所说的那样是一个进化步骤;它只是模型/UI分离的不同实现。 - Scott Stanchfield
@VonC - 没有注明出处就复制并不是一个好主意。请在您的原始帖子中提供出处。谢谢。 - Adeel Ansari
@Vinegar:我总是在我的答案中提供所引用内容的参考。请查看我帖子的第一行。 - VonC
(虽然我承认我在Scott的答案的第一条评论中错误地提到了“javaworld”文章,但实际上我复制的是faq.javaranch文章:这是我帖子第一行引用的文章) - VonC

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