JiveJdon Community Forums
在线277人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 开源项目大家谈
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 9 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
confuse

发表文章: 19
注册时间: 2006年10月09日 23:24
action层的作用感觉越来越小 发表: 2008年04月08日 17:19 回复
现在有些项目采用Struts2,jsf之类的,所以页面上的值自动绑定到action了,也不用像以前再从request里面取了,很多action的作用就是把自动绑定的值传给service层(顶多是做个类型转换),然后通过service返回的参数进行跳转。既然这样的话可不可以直接把service和action合并成一层呢?如果这样做不好,那理由主要是啥呢?action层除了获得view数据,跳转,还应该承担什莫作用呢?谢谢!
wlmouse

发表文章: 112
注册时间: 2006年11月09日 15:58
回复:action层的作用感觉越来越小 发表: 2008年04月08日 17:57 回复
本来就承担这些作用。那些在Action里写代码的都是错误设计。Action本质上来说是MVC中控制器的一部分。本身就只承担调用业务对象、根据结果转发到响应视图的功能。在Action里写业务代码,是因为在学习框架的时候,照书抄的。书是为了介绍框架的,所以在这方面就不太注意。使得很多人养成了在Action里写业务代码的坏习惯。
说到这里,写Hibernate框架书的也有这个问题。书上介绍的是框架,但是有时候对如何在项目里正确使用框架没有写。造成很多人在Dao里写业务代码。
最后两边把Service层的功能一分,三层架构变二层了。Service里除了一句Dao的调用代码,什么也没有了,典型伪三层结构。
confuse

发表文章: 19
注册时间: 2006年10月09日 23:24
re:action层的作用感觉越来越小 发表: 2008年04月08日 20:07 回复
关于你说的伪三层结构肯定是错误的,既然分了三层,那就应该各司其职;我所疑惑的是,在目前高速发展的框架下,为啥还要用三层结构。现在action本身并没有显式的取页面数据了,而是由框架采用IOC方式set进来的,而跳转也是依赖于service层所返回的参数进行的(有些项目service层函数返回的参数就是"success"之类的),这样的话action层存在的目的何在呢?或者我没有考虑到在其他一些情况下action还是有作为的?
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
回复:action层的作用感觉越来越小 发表: 2008年04月09日 09:23 回复
>service和action合并成一层呢?如果这样做不好,那理由主要是啥呢?action层除了获得view数据,跳转,还应该承担什莫作用呢

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

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

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

发表文章: 19
注册时间: 2006年10月09日 23:24
re:action层的作用感觉越来越小 发表: 2008年04月09日 10:34 回复
嗯,非常感谢。其实不是说action层不重要,而是现在的很多框架已经帮我们做了很多action层要做的东西,所以我们自己的应用里面action所作的东西就少了。
关于两全其美的办法,我现在是采用只写一个action,然后动态调度该执行那个具体的service。因为绝大多数页面的action都一样,如果以后有需要在添加新的action类型;总的来说就是把action分类,而不需要为每个页面都写一个action,banq大哥你觉得靠谱吗?
oojdon

发表文章: 132
注册时间: 2007年10月29日 13:55
回复:re:action层的作用感觉越来越小 发表: 2008年04月09日 10:59 回复
看了一下seam框架,框架管理着action,IOC灵活得不可再灵活了,不管是dao还是service,想怎么注射就怎么注射,框架的案例中hiberante的session以及EJB3的EntityManager都注射到了action中,用了Jdon,seam的这种编程方式我咋个就不习惯呢?
Jdon框架强制你对系统进行分层,aciton空壳,编接口和实现,然后配置组件让容器autowiring,要服务自己到容器里面去取。建议初学者把Jdon学一下先,如果直接用seam这些注解类框架,谁教你分层啊?
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
回复:回复:re:action层的作用感觉越来越小 发表: 2008年04月09日 12:14 回复
>总的来说就是把action分类,而不需要为每个页面都写一个action,banq大哥你觉得靠谱吗
对的啊,jdon框架也是这个思路实现的,真理总是站在善于思考人这边,软件永远只是思想的结果。

关于seam框架,在它一出世我就说了,乖乖,把IOC发挥到极致,到底是外国人,剑走偏锋,出奇制胜。其实Seam这种IOC方式,就是国内某个大公司框架自我吹嘘的IoVC。

Seam这样做,好处当然有,但是缺点很显而易见,多层之间本应相互解耦,结果现在可能适得其反,你可能在Action中耦合持久层或其他非业务接口的代码。因为你总是要在代码中提供注射通道,打个比喻,两块木块要连在一起,不管是谁先主动发出连接对方(这些都是连接方式IOC/DI解决的就是连接方式),总是要在一个木块中开个凹槽,另外一个开个凸槽,这样凸插入凹就是注射通道。

为什么Action不能耦合太多代码?
首先从修改维护性上考虑,Action本来就是一个前后台调度的调度者,将前台用户输入传递到后台业务处理,将业务处理结果再传递到前台界面,Action就是一个二传手,说文一点,是Mediator模式实现,二传手就是二传手,不能充当前锋,也不能充当主力,这就是分工。

再打个比喻,警察在十字路口指挥交通,这个警察就是Action,这个警察职责就是调度指挥职责,不能将其他更多职责给他了,否则就违反OO设计原则。

所以,从这个意义上讲,我们将Action低调化处理,不完全消灭它,让它只出现在配置中就可以了,在这个配置中,它完全发挥了调度指挥事件流的作用。





wlmouse

发表文章: 112
注册时间: 2006年11月09日 15:58
回复:re:action层的作用感觉越来越小 发表: 2008年04月09日 14:24 回复
confuse,你说:“我现在是采用只写一个action,然后动态调度该执行那个具体的service。”
请问能给出一些具体配置和代码吗?
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
回复:回复:re:action层的作用感觉越来越小 发表: 2008年04月09日 14:50 回复
>我现在是采用只写一个action,然后动态调度该执行那个具体的service
可以看看Jdon框架中的ModelSaveAction类。
confuse

发表文章: 19
注册时间: 2006年10月09日 23:24
re:action层的作用感觉越来越小 发表: 2008年04月09日 15:04 回复
我在各个界面调用action的时候加入两个参数
一个是service的名字e.g.: login自动加上Service--〉loginService
第二个是这个service的方法名,参数没有的话有默认处理;
靠这两个参数定位到service里面的一个具体方法。
页面上的值都存储到一个dyncDTO类里面,这个是个HashMap,共通的action直接把它传递给service。

例如:
<action name="login" class="commAction" method="doOperation">
<param name="service">login</param>
<param name="operation">login</param>
<result>/WEB-INF/pages/list.jsp</result>
</action>
这个主题有 9 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam