转自:http://hi.baidu.com/wang668/blog/item/ce3fc3889fc29a92a5c27219.html
今天参加了一个面试,面试中问到上述问题,我当时也很纳闷,就蒙了V层,回来后在网上搜到的信息如下:
问题:请教大侠在Struts中的MVC2设计模式中的二个小问题,能不能给个标准的答案?谢谢!
这些天我学习Struts的MVC2设计模式,有些问题不同的教程有不同的回答啊!把我搞糊涂了啊!请教大侠在Struts中的MVC2设计模式中的二个小问题,能不能给个标准的答案?谢谢!
1.ActionForm 类和Action 类这二个实现业务逻辑功能的类到底是归到C层(Controller,也就是控制器层)还是归到M层(Model,也就是模型层),还是V层(View,视图层)?(孙卫琴的书中好像还把ActionForm 类归到了V层了啊!把人都搞糊涂了啊!)
2.如果把Action 类按有的教程上说的应该归到C层,那在Struts中不是没有M层了吗?那M层又是些什么啊?(我看了《Struts in Action中文版》这本书的第一个Struts入门register的小例子,如果把RegisterAction 类归到了C层,那这程序中不是没M层了吗?)
回答1:
1.ActionForm 我认为应该是归到V层,它的作用只是暂时存放http请求的数据,并没有涉及到任何的业务逻辑。
2.我现在正在学着用struts开发一个项目,看了struts的一份文档,觉得struts中的主controller是ActionServlet在struts-config.xml中配置,用来控制全局,而Action顾名思义,动作,应该是从controller。因为首先,V层产生http请求,是先由actionservlet接收,然后在xml文件中查找相对应的url,然后再由对应的action类处理具体的数据。
3.在struts的一些入门例子中,确实不一定需要对应的M层。M层的作用是封装数据。
回答2:ActionForm是V层,负责与jsp之间传递数据,校验数据。Action是C,控制器,它只是负责调用业务对象,调用M层的方法,然后转发。
M层是对数据操作的方法,通常会是一些实体Bean,也包括业务逻辑操作,当然在M层里尼还可以再分层
回答3:ActionForm属于V层,暂时存储jsp表单数据,&到达Action前对field做验证
Action属于C控制层,它只是负责调用M层的方法,然后转发到相应的页面或Action。
其实struts本身是没有提供真正的M层的。
回答4:ActionForm是视图层的,它只是在中间传递数据而已,严格来说,Action并不能完全归入控制层,因为可以直接把控制逻辑写在Action里面,它对于ActionServlet起到一个调度分流的作用,
其实根据孙卫琴的观点,Action是位于c和v之间的,我非常同意这个观点,struts并没有实现Model的规范,作为一个mvc框架,我觉得也没有这个必要,因为作为一个开发者,他面对最多的将是model层,可以自由发挥,由Action调用就行料,用ejb还是hibernate都没有关系。
你看看struts就知道了,ActionServlet只是拦截料客户的请求,加以解析,读取配置文件,根据form调用调用配置的相应的action,你看源代码就会很清楚了。