关于Struts中MVC划分的疑问?

Struts是Java MVC WEB开发框架的事实标准,网上看了很多关于Struts组件在MVC模式中的划分,着实让初学STRUTS的我感到很混乱.
其中争议最多的是ActionForm,有人说它是属于Model层,有人把它归为View,我倾向把ActionForm归属于Model,因为ActionForm是和数据打交道的,在V和C中传输数据的桥梁,但是比起在Struts+Spring+hibernate架构中的Model,Dao之类的,把他称为模型感觉有点不合适.
再有就是Action了,有的把它归为M,有的是C,理论上来说Action因该属于C,但是想想ActionServlet,它才是老板,决定处理请求的Action,Action只是和业务层沟通,我觉得Action还是属于C层,毕竟它还要完成最后JSP页面的跳转控制和为V层准备数据,但是有时候在Action中写太多的业务逻辑的话,又感觉它有点像M,哎,郁闷啊,毕业设计做了个MVC的系统,现在对它的分层还不是很理解,答辩的时候不知道怎么去说啊
[该贴被jacshan于2007年05月27日 12:11修改过]

一般来说 actionservlet是控制器 而action是真正的业务实现者 也就是在action中调用相应的业务逻辑组件来完成数据交互 这样的话action应该也属于c
但是一般的小型应用 业务逻辑层的东西很少的话 也都是写在action里的

以上是我个人看法

struts实现了MVC,actionform是model,action是c
加上spring,hibernate就是多层架构了,又有新的model,但和mvc就没关系了

actionfrom 是对应 view(如:jsp)的module,也就是form中有什么 actionform中就有什么 ,而不是对应持久层的,当页面流程出现变化 actionform也会出现变化 它不应该被传递到 业务层否则代码会出现相当大的改动
而action应该是 控制层(Control),里面不应该写过多的业务代码 它应该起到桥梁的作用

action应该是c啊,actionservlet是全局的,毫无疑问。
其实,我觉得,你吧整个流程搞清楚了,何必苦苦执着于M,V,C呢?

我的理解,一般开发时,在struts配置文件里先写,

顺数大都这样,
先从jsp页面开始,经过actionform把数据取出来传给action,这里面有简单的业务处理,其实,真正的业务处理应该是在javabean中,action最后还要负责跳转,
而全局的控制器就是actionservlet。

所以,我觉得,局限于action和actionform的层次,是浪费你的精力,关注点不再这里!

actionform 是属于v层,它并不是进行数据持久化的.如你使用的是纯struts的话,也就是说你把数据访问都写在action中,那action既是c层又是m层了.一般是会写数据访问类DAO的.其实现在使用struts+spring+hibernate,整个struts的东西动被看做是v层的.这是我的理解.


将J2EE的分层体系简单的认为是MVC 我觉得是错误的
J2EE大体分为 WEB层 业务层 持久层
那么MVC只是WEB层的实现模式而已
而Struts正是这样一种体现MVC模式的框架,也就是说你的系统的整个WEB层都由Struts来构建 而Hibernate则负责构建持久层

现在就是相对于Struts的MVC中,MVC分别是对应Struts的哪几个组件?
当然在Struts+Spring+Hibernate的架构中,那M应该是由Spring管理的业务层组件还有就是DAO接口和 其实现类吧

>现在就是相对于Struts的MVC中,MVC分别是对应Struts的哪几个组件?

Struts的Action属于MVC的C (controller); struts的标签+html的JSP属于V(View),而ActionForm可以看成是Model的一个映射,在struts2.0中Model可以直接作为struts的ActionForm,MVC的M还有表示业务层Model的意思。

用struts2吧 么有actionForm

呵呵,明天答辩了,论文上是参考IBM上的几篇Struts的,他们是把Actoin做为Model
其实这分做什么并不是很重要,但是答辩嘛,还是的有个明确的说法的
[该贴被jacshan于2007年06月15日 23:59修改过]

action应该是control吧,不应该是module

ActionForm是属于Model层的,毫无疑问。
需要提一下的是,WEB架构里是不存在MVC这样的架构的,MVC架构的名词起源于富客户端.
Model,即是你的领域对象,比如你的程序是展现一个人的基本信息,那这个领域对象就应该是Person这个类.(Struts需要领域对象继承ActionForm来自动把表单数据映射到对象,我想应该没有人会觉得这是个好的设计.)
Controller,是你的控制器,通常是根据用户的行为,执行改变你的领域对象操作.
View,是你的展现层,决定怎样的方式展现你的领域对象,比如你希望通过一个表格来展现,那这个表格就应该由View层来画.
MVC,是指当用户执行动作,Controller使Model发生改变,View层自动更新Model对象,而这在WEB应用里是不可能的.因为http连接是无状态的.不过因为两者的区别也不是太大,所以还是经常用MVC来代替WEB的架构体系.
[该贴被boyszz于2007年09月09日 04:59修改过]

我个人认为这个问题应该分开来说,针对不同的应用,担任不同的角色.在多层次的结构中.有的时候部分业务在其他层次中实现更加简便.因为在设计阶段就离散部分业务逻辑.因此为业务逻辑有时会渗透甚至融合到表示层和持久层.这一现象针对简单需求而产生的结构退化.或者是对特殊需求的正确权衡.一般来说,action是C层,但如果里面参入了太多的业务逻辑的话.就是M层了.而actionform有时候是V层.在没有各其他框架发生关系的情况下.actionform就是V层.如查struts加入了其他框架.像spring,hibernate.actionform就是M层.所以针对不同的情况与应用.角色会发生变化,这是应用的需要,也是struts的扩展性.

MVC架构只是针对你的WEB层设计,并不是你整个J2EE的架构.通常,你的一个项目是由WEB层(或者说是UI层,这样更通用一点)、业务层和持久层构成的。
ActionForm是什么?是用来对应你表单里的数据的,通常也会是一个领域对象,例如用户注册的一个表单Form,那这个表单数据最终会生成一个User这样的领域对象,并调用业务层UserService.addUser( User user )这样一个方法来进行保存用户数据,判断用户名是否重复,写进数据库这些操作都应该是addUser方法做的。所以他属于Modle,如果一个领域对象不需要通过继承ActionForm,就可以映射到一个表单,对我们开发来说那就更好了。至少。你不用写一个User,一个UserForm,两个并无区别的对象.这也是Struts设计上的一个失误.并受人指责.
[该贴被boyszz于2007年09月09日 20:53修改过]
[该贴被boyszz于2007年09月09日 20:55修改过]