`
qinysong
  • 浏览: 192863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Struts不能完全用MVC来理解

阅读更多
刚才有一个关于Struts和MVC组件对应关系的帖子,现在好像被放入了新手区,关于这个问题记得以前有过激烈的讨论,可惜刚才我搜索一下没有找到想找的那篇,希望有谁找到能把链接发上来

对于这个问题我觉得还是有讨论的一些必要,因为疑惑的人还是存在,而且从我个人来说对这个问题的理解也在不断的变化。现在把我现在的理解写下来,可能存在偏颇(本来理解也在变化),只供讨论

我现在的观点是:
MVC可以帮助刚刚进入面向对象设计的开发者理解分层体系结构(MVC的最大价值),之后在面对Struts,Spring时,可以借助那种分层思想、及各层的大致组件角色和职责对这些框架进行理解,但不必钉钉铆铆的去对应,因为这种对应是模糊的、是非对称的
理由如下

第一
MVC是80年代Smalltalk80引入的一种用户界面应用程序设计模型,经过二十多年的发展,到现在Struts、Spring这些框架已经对MVC进行了很大的(局部)扩展,增加了很多原来不存在的角色,以使其分工更加细致。
以Struts为例,Struts其实只是体现MVC思想的Web层框架,只体现了View和“泛Controller”含义,而对于Model实现规定很少,基本可以自由实现。
这其中最有争议的是Action属于Controller还是Model,我觉得如果非要给Action找个归宿的话,就要看系统设计的具体情况,要看让Action来做什么,如果只让Action来根据请求调用相应的业务服务/处理对象,并将处理结果放入Request Attribute中,那么就可以将Action和ActionServlet、RequestProcessor统统作为“泛Controller”的组成部分(这种纯度高的设计层次较多较细,实际使用不多);如果让Action来承担一些业务逻辑的处理,比如一次请求需要调用多个业务服务的多个处理,再比如对于简单的设计Action直接调用DAO进行操作,那么它就又具有Model的部分职能,所以一般情况下Action是一个介于Controller和Model的衔接角色。

第二
原始MVC所存在的Smalltalk用户界面应用程序,与Struts、Spring的Web应用程序体系结构不同。在用户界面应用程序中,View和Model之间交互是基于事件的,Controller是作为一种策略Strategy模式应用的,控制不同的事件产生不同的相应方式;而在Web应用程序中,View和业务服务是基于请求/响应机制的,而Action更普遍的认同是作为一个Command模式。

个人理解,欢迎拍砖
分享到:
评论
19 楼 qinysong 2007-03-29  
阳光晒晒 写道
qinysong 写道
这个帖子怎么被放到新手区来了,难道是大家都有很好的理解了吗?还是不屑一辩
lz你题的太晚了
前年提正好但今年是ROR之年
不是ROR也得ajax
不是ajax也得是jsf
再再不行了也应该用struts2(webwork)
浮燥是流行....

呵呵。。有道理
18 楼 阳光晒晒 2007-03-29  
qinysong 写道
这个帖子怎么被放到新手区来了,难道是大家都有很好的理解了吗?还是不屑一辩
lz你题的太晚了
前年提正好但今年是ROR之年
不是ROR也得ajax
不是ajax也得是jsf
再再不行了也应该用struts2(webwork)
浮燥是流行....


to :lane_cn
引用

action调用model工作,再把工作的结果告诉view。struts框架规定了model的调用方式。

struts的框架里面没有model,任何通用的框架中都不可能有model,model永远要根据自己的业务去开发。

只有象SAP这样的特定领域框架才可能提供model,也只能是提供一个通用性的model,需要根据自己的需要进行扩展。

所有的框架都是为了加强业务对象的功能(比如ORM框架把业务对象自动保存到数据库里)、减少model对view的依赖(比如struts框架所干的事情)。如果不搞业务对象,大搞各种框架,本身就是奇怪的风格。在软件开发的历史上,是先有了model,然后为了解决model身上的问题,才出现各种框架的。


听你说了之后大开眼界
架构师是指model的架构
而非开发框架....
17 楼 qinysong 2007-03-29  
这个帖子怎么被放到新手区来了,难道是大家都有很好的理解了吗?还是不屑一辩
16 楼 lane_cn 2007-03-29  
action调用model工作,再把工作的结果告诉view。struts框架规定了model的调用方式。

struts的框架里面没有model,任何通用的框架中都不可能有model,model永远要根据自己的业务去开发。

只有象SAP这样的特定领域框架才可能提供model,也只能是提供一个通用性的model,需要根据自己的需要进行扩展。

所有的框架都是为了加强业务对象的功能(比如ORM框架把业务对象自动保存到数据库里)、减少model对view的依赖(比如struts框架所干的事情)。如果不搞业务对象,大搞各种框架,本身就是奇怪的风格。在软件开发的历史上,是先有了model,然后为了解决model身上的问题,才出现各种框架的。
15 楼 阳光晒晒 2007-03-29  
lane_cn 写道
阳光晒晒 写道
如果你不切开action的话
你怎么知道service层呢?
怎么知道model是怎么样子的呢?
一切都是在迷雾之后
被action+form所封装

action是控制器的一部分,他肯定会依赖view。比如struts action,他会依赖HttpResponse, HttpRequest这些类型,他还要从request得到请求参数,把输出文字放到response里面去,物理的和逻辑的依赖都是存在的。如果你把model融合到action中,model和view就分不开了。

form就是页面上的表单,在一些情况下他的属性恰好业务对象的属性一样,但是他根本不能作为代替model。道理很简单,界面上的内容不一定正好对应后台的业务对象。比如我要在界面上显示一个客户和他的最大的一笔订单,在界面上这是一个表单,但是在model层应该是两个关联的类:Customer和Order。

model本身是就应该是清晰的,他可以独立的装配,独立进行测试。不需要action+form为他提供封装。
真的不需要么
那么把model
放在struts的哪里呢?

从struts的角度(页面美工角度来看的话)
他们看不到model
为什么只有可能是被封装了
14 楼 lane_cn 2007-03-29  
阳光晒晒 写道
如果你不切开action的话
你怎么知道service层呢?
怎么知道model是怎么样子的呢?
一切都是在迷雾之后
被action+form所封装

action是控制器的一部分,他肯定会依赖view。比如struts action,他会依赖HttpResponse, HttpRequest这些类型,他还要从request得到请求参数,把输出文字放到response里面去,物理的和逻辑的依赖都是存在的。如果你把model融合到action中,model和view就分不开了。

form就是页面上的表单,在一些情况下他的属性恰好业务对象的属性一样,但是他根本不能作为代替model。道理很简单,界面上的内容不一定正好对应后台的业务对象。比如我要在界面上显示一个客户和他的最大的一笔订单,在界面上这是一个表单,但是在model层应该是两个关联的类:Customer和Order。

model本身是就应该是清晰的,他可以独立的装配,独立进行测试。不需要action+form为他提供封装。
13 楼 Y04069 2007-03-28  
个人觉得没有必要分的很清楚,只要保证良好的扩展性和维护性即可~~~
12 楼 阳光晒晒 2007-03-28  
如果你不切开action的话
你怎么知道service层呢?
怎么知道model是怎么样子的呢?
一切都是在迷雾之后
被action+form所封装


每个动作作为一个方法
几个方法组成一个模型
模型的属性存在form中

不是非要向原点切的蛋糕才叫一块蛋糕,#切的也叫一块蛋糕
只要有分割规则就可以作为模型化分规则

例子:
有个飞机 模型
你所说的是
Airplane
属性:
人数 max_person
载重 max_heigh
所在地 airport
动作:
上飞机:load
飞行   fly
下飞机 unload


在我说的model
Action:
以下为方法名
load
fly
unload
init
........

form:
以下为属性名
max_person
max_heigh
airport
pageno
maxpage
.......

把action+form就是一个model了只是业务分离的不清楚.而已
11 楼 lane_cn 2007-03-28  
阳光晒晒 写道
action 内封装了
业务模型
form内存储了
业务模型的属性值

不剖开看的话....
也应该是model了

PS:struts是mvc2并非mvc


也许我们口中的“model”不是一个东西。你能解释一下吗,举个例子?
10 楼 阳光晒晒 2007-03-28  
action 内封装了
业务模型
form内存储了
业务模型的属性值

不剖开看的话....
也应该是model了

PS:struts是mvc2并非mvc
9 楼 lane_cn 2007-03-28  
我用C#写过一个MVC架构的示例:
代码地址:http://www.cnblogs.com/Files/lane_cn/skii.zip
示例说明:
http://www.cnblogs.com/lane_cn/archive/2007/03/13/672628.html
这是一个窗体程序的MVC代码。
示例代码分为三个包:
1、AfricaTelecom:这是model
2、View:这里是视图
3、Action:控制器的主要部分

“action+form = model”这个是不对的,model是业务模型。
8 楼 dwangel 2007-03-28  
Struts的MVC是Web层上的MVC,不是初始的单机上的MVC模式,
以单机的MVC来理解会有一定偏差。

一本struts的书就是以普通mvc来解释struts的mvc,好像这本书还发行量大,造成误解也就难免了。

Web涉及到与服务器交互并非即时,有些东西不一样的。
没必要找在Web层上符合 单机mvc的框架。
7 楼 cozone_柯中 2007-03-27  
qinysong 写道
Lucas Lee 写道
Struts可以说只是借用了MVC的思想和概念。
完全对等不太可能。

是的,我就是要说明这个问题


问下,有完全对等MVC的框架吗?
6 楼 qinysong 2007-03-27  
Lucas Lee 写道
Struts可以说只是借用了MVC的思想和概念。
完全对等不太可能。

是的,我就是要说明这个问题
5 楼 LucasLee 2007-03-27  
Struts可以说只是借用了MVC的思想和概念。
完全对等不太可能。
4 楼 giscat 2007-03-27  
引用
刚才有一个关于Struts和MVC组件对应关系的帖子,现在好像被放入了新手区,关于这个问题记得以前有过激烈的讨论,可惜刚才我搜索一下没有找到想找的那篇,希望有谁找到能把链接发上来

  在入门讨论里
  http://www.iteye.com/topic/65589
3 楼 giscat 2007-03-27  
struts是有点不清不楚
  自己整一个,可以搞得小葱拌豆腐,一清2白
  人要靠自己丫
2 楼 qinysong 2007-03-27  
阳光晒晒 写道
action+form = model

form 只是对页面表单请求及显示数据的封装,在Struts中form还可以承担部分的数据校验逻辑,但在Spring中数据校验逻辑也被封装到了Validator中,所以form应该属于View
1 楼 阳光晒晒 2007-03-26  
action+form = model
actionservlet+struts-config.xml= controller
jsp+自定义标签=veiw

model与veiw可以分离编写(事实上没见过这么开发的)
之后用xml把这两边织在一起....

相关推荐

    MVC.rar_SpringMVC Struts_java MVC_mvc_spring-aspects-3.2.2_spri

    总的来说,这个压缩包提供了一个深入理解SpringMVC、Struts和Java MVC模式的实战案例,对于学习和提升Java Web开发技能是非常有价值的资源。通过分析和运行其中的代码,开发者可以更好地掌握Spring框架的核心功能,...

    全新mvc的升级 完全仿struts2

    **mvc模式详解** ...总结来说,MVC模式是现代Web应用的基础,而Struts2作为成熟的MVC框架,为开发者提供了强大且灵活的工具。通过学习和仿照Struts2,开发者可以加深对MVC的理解,提升软件开发的效率和质量。

    Struts应用开发完全手册源代码

    《Struts应用开发完全手册》这本书可能是为了深入讲解Struts框架的使用和实践,通过书中各个章节的源代码,读者可以更好地理解并掌握Struts的核心概念和实际操作。 在描述中提到的"以数字命名的文件代表书中的章节...

    struts 2完全学习手册

    4. **实践项目开发**:通过实际的项目开发来加深对Struts 2的理解,同时也能积累宝贵的实战经验。 5. **学习最佳实践**:参考一些成熟的项目案例或开源项目,了解如何在实际工作中合理运用Struts 2。 通过以上内容...

    Struts应用开发完全手册(11-15)

    本手册“Struts应用开发完全手册(11-15)”涵盖了从第11章到第15章的内容,主要关注Struts框架的核心概念、配置、以及实际应用中的技巧。 1. **MVC模式的理解与应用**: MVC模式是软件工程中的一种设计模式,它将...

    struts2完全学习手册源码

    Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。它是Apache软件基金会旗下Jakarta项目的一部分,基于经典的Struts1框架,并引入了更多现代特性和设计模式,提高了开发效率...

    Struts_2完全学习手册

    ### Struts 2完全学习手册知识点总结 #### 一、Struts 2 框架概览 **Struts 2** 是一个基于 **MVC(Model-View...对于想要深入了解和掌握 Struts 2 的开发者来说,《Struts 2 完全学习手册》是一个非常有价值的资源。

    struts2JAR包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts2练习完全代码

    Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目,被广泛用于构建Java Web应用程序。这个压缩包“struts2.0”似乎包含了全面的Struts2练习代码,这将是一个学习和理解...

    struts2必须jar包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    review.struts.zip

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    Spring mvc 注解理解

    首先,我们来看一下Spring MVC的核心组件: 1. **DispatcherServlet**:前端控制器,它是所有HTTP请求的入口点。DispatcherServlet负责接收请求,并通过HandlerMapping找到合适的Controller进行处理。 2. **...

Global site tag (gtag.js) - Google Analytics