论坛首页 Java企业应用论坛

我的通用DAO理解,请大家指正

浏览 34147 次
精华帖 (2) :: 良好帖 (1) :: 新手帖 (2) :: 隐藏帖 (1)
作者 正文
   发表时间:2008-11-23  
helloxuweifu@hotmail.com 写道
期待回复中......


不对,可能我没说清楚,异常分为两种。

1.第一种是系统异常,一般在action中处理,你说的场景“保存失败”就算是这一种(可能是数据库服务器down机导致),但是这一类最好能够提炼出通用需求,用过滤器或者拦截器一次性搞定。

2.我重点是说第二种业务异常,例用户注册的时候,假设有两种失败的可能,用户名已存在或身份证号已存在,此时就是两种完全不同的两种返回结果,你打算如何实现。个人认为最佳的策略就是用自定义(且非受控)的异常来进行消息传递,当然也是在action中处理,但是是拦截自定义异常的方式。
0 请登录后投票
   发表时间:2008-11-23   最后修改:2008-11-23
showtime520 写道
SQL异常等无法处理直接抛出由struts的异常处理架构处理,service层最好不抛出异常,而是返回一些有意义的标识。实在无法返回采用异常。异常很耗资源,尽量少抛出自定义异常。

异常消耗资源在JDK1.4以后可以忽略不计,老黄历了。自定义(且非受控)异常作为消息传递机制是非常好的方法,有何不可。

难道要用C时代的设置不同的返回错误代码(并且维护一张错误代码表)?或是特别定义一个返回类型(丧失返回类型的特殊性并进一步丧失编译器检查的好处)?
0 请登录后投票
   发表时间:2008-11-23   最后修改:2008-11-23
引用出错。
0 请登录后投票
   发表时间:2008-11-23  
引用没错,楼主一看就知道,他那篇太长了,我怕引用了污染版面。
0 请登录后投票
   发表时间:2008-11-24  
楼上的考虑得很周到,你说的我重点是说第二种业务异常,很有道理,可我还是想你对我现在贴出来的代码及上面提到的问题进行针对性回答.
0 请登录后投票
   发表时间:2008-11-25  
wcleye 写道
zhu_chen001 写道
dao最好不要显示的抛出任何的异常
service最好抛出自定义异常


我的做法好像和你相反,在DAO层抛出自定义异常,在Action中捕捉异常做流程跳转处理..

我也认为这样做最好,
不过建议全部异常由同一的异常框架处理

0 请登录后投票
   发表时间:2008-11-25   最后修改:2008-11-25
helloxuweifu@hotmail.com 写道
楼上的考虑得很周到,你说的我重点是说第二种业务异常,很有道理,可我还是想你对我现在贴出来的代码及上面提到的问题进行针对性回答.

假设自定义的非受控异常名字叫TestException
try{ 
  xxxServiceImpl.insert(product); 
[b][color=red]}catch(TestException ex ){
  throw new ChipInException(ex.getMessage());[/color][/b]
}catch(Exception e ){ 
  e.printStackTrace(); 
  throw new ChipInException("保存失败"); 
}


只要这样就行了,当然这是为了和你目前的风格相符做出的改动。
catch的异常来自于serviceImpl,也可以来自于Dao中抛出的TestException,
ex.getMessage()具体内容和组织你可以自由发挥。

至于你说的“上面提到的问题”,不是很清楚指的是什么,很多人说了很多问题,你是指哪几个问题?

通用拦截器只是个建议,没有现成代码供你参考,建议是等需求比较清楚了再考虑。
0 请登录后投票
   发表时间:2008-11-25   最后修改:2008-11-25
一直往上抛。。。当然不能抛给用户。。。自定义异常截获
0 请登录后投票
   发表时间:2008-11-26  
既然是通用的,你觉得用泛型好么?
0 请登录后投票
   发表时间:2008-11-26  
aizhu1314 写道
既然是通用的,你觉得用泛型好么?

你的意思的用Object吗?
0 请登录后投票
论坛首页 Java企业应用版

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