1、写一个用户登录的程序,进行参数的验证,如果参数无效,是写一个checked exception(UserNameInvalidException)包装参数的有效性规则并将其抛出,
还是直接把参数的有效性规则包装在一个普通的类里发回客户端?
2、一个处理业务逻辑的方法,通常需要调用很多其他的方法(同时把参数传给这些方法),是不是这些方法实现的时候都需要进行参数的有效性验证,还是不管他,
任其可能抛出诸如NullPointerException或者IndexOutOfBoundsException这样的(unchecked exception)?
3、如果系统系统抛出了checked exception e,就在catch块中用new RuntimeException(e) 重新抛出 unchecked exception(这个只看懂了一半,请高手赐教另一半?)
文章链接:http://hi.baidu.com/melon12356/blog/item/4f47c023737347579922ed0a.html

解决方案 »

  1.   

    我来肤浅的解释下吧,呵呵。楼主链的那篇文章确实不错,之前也拜读过。
    1.这个随便,楼主是不是在问,checked exception 与unchecked exception该如何选择?
    2.我建议方法中不做验证,理由是调用端有时可以保证参数的绝对正确性,或是可以选择在调用前验证,也就是存在有时不必验证的情况,所以把这个参数验证工作甩给调用端
    3.打个比方吧,如果楼主用过hibernate就会发现,那个该死的sql异常居然被hibernate包装成了unchecked exception,我觉得这是因为通常程序无法为sql异常作出有效的补救,往往只能告诉客户操作失败,或是做一些日志记录的操作,因此hibernate干脆把它变成了unchecked exception,让我们在需要时选择接住,而不是强制我们接住。于是,碰到某些无法解决的问题,就转成unchecked exception往上抛吧,无法作出处理的地方都不接住。
      

  2.   

    1。建议js验证,减少与server通信以免占用服务端资源。
    2。底层最好不管参数验证,默认所有参数都正确,否则一层层调下来不累死,而且也不能保证所有异常都被捕获,是什么异常就抛出什么异常,这样调用者好跟踪,除非你能保证任何异常都有对应的ErrCode和详细的ErrMessage能让调用者明白。
    3。不用new,是什么就抛什么。对于1楼的3,个人觉得是hib的蠢。我sql写错了,你不告诉我sql哪里错了(一般数据库都会告诉我那行错了,甚至哪个位置错了),而是告诉我unchecked exception,我找还得费半天功夫,那不是磨人?就像我调用某个工具包,然后它catch到任何异常,都throw new Exception("错误,自己找!");,哪个人给你这样个工具包,你不骂娘?以上都是个人意见,楼主看着办。
      

  3.   

    赞同楼上,一开始用hib的时候确实感到这点不爽。呵呵。