论坛首页 Java企业应用论坛

抛出异常还是约定返回值

浏览 21566 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2012-02-17  
这两种方式都有其可取之处, 个人觉得语言还是会走约定这一方向。 说白了,异常只是一个特别的返回值。
0 请登录后投票
   发表时间:2012-02-17  
mayday85 写道
我觉得异常的好处是直接返回栈低
只有一层的话,用返回值比较理想吧



用异常感觉整个控制流程比较舒服,代码更直观,而且很多异常可以通用,但性能方面确实是个问题,系统里面涉及多了这种处理方式,估计是一大隐患

0 请登录后投票
   发表时间:2012-02-17  
如果LZ项目用的是String的话,可以考虑aop
具体执行情况,可以保持在一个map中,执行到哪步了,每部分返回的状态。这样根据map应该可以判断下面的逻辑了。
0 请登录后投票
   发表时间:2012-02-17  
第一种:N个前置条件的检验,放到action里面做,如果不满足返回相关页面之类的
优点:开发直接简单
缺点:思维直接控制层充斥着这样的业务逻辑,很乱,复用性不强,换个action执行这个,还要再组装


支持第一种 这种前端参数判断在action层做判断才是合理的, 如果考虑复用的话 可以在超类做统一验证。
还有一点 是正常流程就不要用异常来控制流程。
0 请登录后投票
   发表时间:2012-02-17  
个人觉得提供一个检测的方法,如果满足才调用,调用时发现条件不满足直接返回异常即可
0 请登录后投票
   发表时间:2012-02-17  
悲剧了 写道
gtssgtss 写道
action:

   

简单的方法,不过我并不喜欢



这个耦合也太严重了,快回到解放前了.


就是,有个项目发现就是这样写的。恶心死我了。还说什么这样方便,到处都是传递Map,方法的参数都必须用map取出来
0 请登录后投票
   发表时间:2012-02-17  
悲剧了 写道
具体场景如下:
现在要执行一个业务操作方法,这个业务方法执行要有N个前置条件满足才能执行
    现在使用统一MVC架构,调用者要收到反馈,知道没ok,根据反馈进行一些列的后续操作,比如通知用户去哪完善,怎么完善

那么怎么处理?
第一种:N个前置条件的检验,放到action里面做,如果不满足返回相关页面之类的
优点:开发直接简单
缺点:思维直接控制层充斥着这样的业务逻辑,很乱,复用性不强,换个action执行这个,还要再组装

第二种:N个前置条件和业务方法在一块组成一个service方法,直接调用就ok了
作为有追求的coder,我们肯定要第二种,那么第二种问题来了
问题:
这一系列走一流程,写成一个方法完成,那么前置条件到底是第一个不满足,还是第N-1个不满足,怎么得到反馈
解决方式1:抛出不同的异常来完成通知
好处:不满足方法的约定,直接给出异常,
缺点:感觉上犯了异常代替了正常流程的问题,不是很确定
解决方式2:根据返回值来通知相关情况,但这种检测条件满足否
有点:性能方面,约定一些列的final String 或者  Eunm ,也算直观吧
缺点:方法返回值承载了太多东西

大家有什么看法?转头什么的扔吧






Action中会有一些Action相关的逻辑,
Service中也会有一些Service相关的逻辑。

这两者没有冲突,关键是业务的完整性。


对于业务逻辑执行失败的状态,可以用一个自定义Exception,保存状态码。Service层抛出异常带状态码,Action接住获取状态码就知道是什么错误了。

0 请登录后投票
   发表时间:2012-02-17  
封装一个异常包含约定代码,如果发布成服务,统一拦截。把异常转为约定代码返回给客户端
0 请登录后投票
   发表时间:2012-02-17  
定义一个检测的公共类,检测方法,返回检测的结果值,
根据不同的值,在公共的错误解释类中,返回该值对应的错误解释
0 请登录后投票
   发表时间:2012-02-17   最后修改:2012-02-17
在service层对可能发生的问题抛出异常 然后在action层捕捉  异常本身就是用来做这种事的 。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics