1

大家好,最近我开始探索 Spring MVC,因为目前我正在参与一个使用它的项目。在此之前,我检查了 Struts 2 框架。但是,在我看来,这两个框架对 MVC 设计模式 AngularJS 的定义和实现是不同的,因为客户端 MVC 框架也有自己的。我将解释我注意到 Spring MVC 和 Struts 2 之间的差异。

Spring:(引用Spring in Action

1-控制器: 在Spring中,控制器是一个处理请求的组件,执行一些逻辑(理想情况下,这个逻辑应该被提取到一些服务或业务逻辑类中)并返回数据。

" DispatcherServlet 的工作是将请求发送到 Spring MVC 控制器。控制器是处理请求的 Spring 组件。但是典型的应用程序可能有多个控制器,并且 DispatcherServlet 需要一些帮助来决定将请求发送到哪个控制器。所以DispatcherServlet 查询一个或多个处理程序映射以确定请求的下一站将在哪里。处理程序映射在做出决定时将特别注意请求携带的 URL。 ” p166

2-模型:是一些需要带回给用户并显示在浏览器中的信息。

“控制器执行的逻辑往往会导致一些信息需要带回给用户并显示在浏览器中。这些信息被称为模型。”

3-视图:这是最明显的一个,它的HTML + CSS结合模型信息。

现在让我们看看 Struts 2 是如何实现 MVC 的

Struts2:(引用 Struts 2 in Action )

1-控制器:控制器是将url映射到适当动作的组件,动作在struts中实现模型?!(在春天,这不是控制器所做的)。Struts 只有一个控制器,即 FilterDispatcher。在 Spring 中,这是由 DispatcherServlet 完成的,他们不称之为控制器!

“控制器的工作是将请求映射到操作”

《控制器的角色由 Struts 2 FilterDispatcher 扮演》 p13

2-模型:模型,在struts中,是一个将业务日志和一些数据模型保存在一起的组件,这使得应用程序状态。

“模型由 Struts 2 动作组件实现” p13

“在更专业的术语中,模型是应用程序的内部状态。这个状态由数据模型和业务逻辑组成” p14

所以struts中的模型不仅仅是像User、Contract、Order这样的数据模型。它还包含应用程序的逻辑。

这是这两本书中表示的string和struts 2的两个图: Spring MVC 在此处输入图像描述

支柱 2

在此处输入图像描述

现在,哪个 MVC 是正确的 MVC ?

前端控制器 MVC 与谁相关?

感谢您提前回答。

4

3 回答 3

4

根据这个 wiki 链接。http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller。MVC 是一种设计模式,其中 Model 保存业务数据、验证规则,而不是太多的业务逻辑(据我所知)。

2- Model:The model, in struts, is a component that hold business log and some data model together this make the application state.

模型是 setter 和 getter 的普通 pojos。除了验证规则,我从未在模型数据中使用过业务逻辑。

控制器(spring)/Action 类(struts)是控制模型数据和视图的控制器。即它是接收模型的中心点,在调用服务层时更新它,并根据配置以适当的视图响应。

view - 只是用户在成功/失败响应时看到的最终输出。

Dispatcher servlet 和 Filterdispatchers 是 url 映射处理程序,它们标识其控制器(注入模型数据和处理程序)并依次接收视图。

在地面上,spring 和 struts 都遵循 Controller、Model 和 View 应该做的基础。总结一下 spring 和 struts 都使用 MVC 模式,因为这两个框架之间的实现逻辑不同。

于 2013-10-28T10:11:38.990 回答
4

我是这样想的。

模型:存储和检索数据;对使用它的所有应用程序强制执行必须一致的策略,称为“业务逻辑”。(例如:年龄必须 > 18。)

查看:向用户呈现数据;为用户提供与系统交互的机制。

Controller:在Model和View之间做中介;强制执行特定于该应用程序的策略(例如清理输入),有时会与“业务逻辑”混淆。(例如:age 必须是一个只有数字的字符串,下面是解析它的方法。)

我看到了两种常见的 MVC,一种用于桌面 UI,一种用于 Web UI。

Web MVC:控制器处理请求、更新和/或查询模型,选择视图模板,将模型与视图模板合并。

桌面 MVC:控制器解释用户手势、更新和/或查询模型;模型开火“我变了!” 事件;查看订阅“我变了!” 事件来更新自己。

Spring 对 Controller 的描述将其与 Martin Fowler 在他的《企业应用程序架构模式》一书中所说的“事务脚本”混淆了。我理解这一点,因为我们经常将事务脚本实现为控制器类型的操作。具有讽刺意味的是,Struts 比 Spring 更鼓励(或至少鼓励)这一点。

“Action 在 Struts 中实现模型”听起来简直是疯了。我只能假设这是一个错误。

最后,前端控制器是一个中央请求处理程序,它将请求分派到更具体的控制器。在桌面应用程序中,我们可以将“TransferFundsController”直接连接到“TransferFundsAction”按钮,因此我们不需要前端控制器。在 Web 应用程序中,我们对所有请求都有一个单一的入口点,并且我们有很多常见的行为(例如解析请求参数),因此我们经常希望前端控制器来完成所有这些工作。

我希望这有帮助。

延伸阅读:

Smalltalk-80(TM) 中的应用程序编程:如何使用模型-视图-控制器 (MVC) http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html

http://c2.com/cgi/wiki?ModelViewControllerHistory

于 2013-10-31T23:19:56.950 回答
1

我可以告诉你我是如何在我的 Web 应用程序中使用 Struts 的 MVC 结构的:

查看:JSP + CSS + 一些您可能需要的脚本

控制器:这里我做HTTP GET/POST,以及通过使用代码来解释每个动作。例如,注销按钮的代码为 1,它通过 Form 类从 JSP 映射到 Java。该值通过 JS 脚本从 View 发送到 Controller。

模型:这就是魔法发生的地方。Model 负责处理整个业务逻辑。无论您需要处理什么东西,无论您可能需要什么计算或数据转换,这都是它失败的地方。

这是一个非常实用的示例,说明了 MVC 基于我自己的经验所做的事情,我认为这比阅读一堆关于它的理论更容易理解。但这一切的意义何在?在服务器端做尽可能多的处理。通过采用这种 MVC 结构,您将避免在 JS 中编写可能很复杂的函数,而是在旧的 Java 中编写它们。我发现这是一个很大的优势,因为我不太喜欢 JS。

话虽如此,我相信您的 Struts 2 图是正确的 MVC。

我确信关于 MVC 及其好处还有很多话要说,但我希望我的回答无论如何对你有帮助。

于 2013-10-28T16:22:56.030 回答