action层的作用感觉越来越小

08-04-08 confuse
                   

现在有些项目采用struts2,jsf之类的,所以页面上的值自动绑定到action了,也不用像以前再从request里面取了,很多action的作用就是把自动绑定的值传给service层(顶多是做个类型转换),然后通过service返回的参数进行跳转。既然这样的话可不可以直接把service和action合并成一层呢?如果这样做不好,那理由主要是啥呢?action层除了获得view数据,跳转,还应该承担什莫作用呢?谢谢!

                   

3
wlmouse
2008-04-08 17:57

本来就承担这些作用。那些在Action里写代码的都是错误设计。Action本质上来说是MVC中控制器的一部分。本身就只承担调用业务对象、根据结果转发到响应视图的功能。在Action里写业务代码,是因为在学习框架的时候,照书抄的。书是为了介绍框架的,所以在这方面就不太注意。使得很多人养成了在Action里写业务代码的坏习惯。

说到这里,写Hibernate框架书的也有这个问题。书上介绍的是框架,但是有时候对如何在项目里正确使用框架没有写。造成很多人在Dao里写业务代码。

最后两边把Service层的功能一分,三层架构变二层了。Service里除了一句Dao的调用代码,什么也没有了,典型伪三层结构。

confuse
2008-04-08 20:07

关于你说的伪三层结构肯定是错误的,既然分了三层,那就应该各司其职;我所疑惑的是,在目前高速发展的框架下,为啥还要用三层结构。现在action本身并没有显式的取页面数据了,而是由框架采用IOC方式set进来的,而跳转也是依赖于service层所返回的参数进行的(有些项目service层函数返回的参数就是"success"之类的),这样的话action层存在的目的何在呢?或者我没有考虑到在其他一些情况下action还是有作为的?

banq
2008-04-09 09:23

>service和action合并成一层呢?如果这样做不好,那理由主要是啥呢?action层除了获得view数据,跳转,还应该承担什莫作用呢

你的思路非常好,Action的作用是很小,但是不能和Service/Action合并在一起,因为Action属于表现层 而Service属于业务层,多层架构不能破坏,否则又回到两层的Delphi时代。

那有没有又不需要Action,但能保留Action的方式呢?有,Jdon框架2004年就做到了,也就是不需要写Action代码,但是可以配置Action,这样达到两全其美。

当然,相信这些老外技术除了走上述国人Jdon框架这条路,还有其他更好的路可以解决上面两难问题,拭目以待。

confuse
2008-04-09 10:34

嗯,非常感谢。其实不是说action层不重要,而是现在的很多框架已经帮我们做了很多action层要做的东西,所以我们自己的应用里面action所作的东西就少了。

关于两全其美的办法,我现在是采用只写一个action,然后动态调度该执行那个具体的service。因为绝大多数页面的action都一样,如果以后有需要在添加新的action类型;总的来说就是把action分类,而不需要为每个页面都写一个action,banq大哥你觉得靠谱吗?

3Go 1 2 3 下一页