论坛首页 Java企业应用论坛

老掉牙的话题,java的异常处理。

浏览 36557 次
精华帖 (1) :: 良好帖 (6) :: 新手帖 (12) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-03-21  
没收获太多,bruce自己写java代码我觉得也不算风格多好,import *在demo中比比皆是,无模板类型声明的调用也比比皆是,他对语言特性有敏锐的感觉,但未见得所有观点都能从应用开发和软件管理出发
这篇文章也是反复说两点吞异常和接口污染
分开说
1.吞异常是态度问题。
下级来异常,要么扩展接口向上抛,要么代码吞,如果吞了,至少说明他认为问题应中止于此,也不需要做什么,如果不应该他消化的他也照吞只为了图简便,那还是开了他吧。
这样的人更不会好好对待下层上来的和自身的unchecked exception,也不用指望他能好好注明文档。应该止于此处的excpetion很可能就被轻而易举抛到上层,而上层对这种可能性一无所知,毫无保护,因为这样的人懒得要吞checked异常就更不会为下面那些很难估计的unchecked去考虑完善文档,指望测试搞定这些不可预计的异常?拉到吧,国内绝大部分公司连ifelse支路测试覆盖都过不了80%,就别谈哪些unchecked异常了

2.接口污染
确实有这个问题,异常成为了接口一部分会影响上层
但是你要明白,checked 异常和返回类型、函数签名一样,你用了,就已经被侵入了,你怎么不质疑为什么函数调用返回不能是obj或者void*,我自己决定转不转型,你返回你的类型不是强迫我import或者include返回值类型定义吗?这不是服务端强暴调用端吗?为什么你要有时返回空指针,不能返回空对象,害得调用端还要判断,这不又是强暴吗?

一个接口7,8个异常,这是设计层面的问题
每个层应该有自己的异常,层内部本身应该转义,你给客户看个spring初始化文件读取错误的异常有意义吗?这样即使深层次的嵌套异常也不会爆炸。

因为checked实际已经把异常上升到签名级别就导致侵入是一定的,所以设计必须谨慎,要确认应该由调用这处理异常或者恢复的情况才使用

既然你那么认同公仆论,那干脆也不发你工资了,这个异常你作为runtime向上抛好了,别强求别人catch了,有些人喜欢checkedException,因为这会有当领导的感觉,有哥说了算的感觉。结果苦了调用方。
0 请登录后投票
   发表时间:2011-03-21  
ppgunjack 写道
没收获太多,bruce自己写java代码我觉得也不算风格多好,import *在demo中比比皆是,无模板类型声明的调用也比比皆是,他对语言特性有敏锐的感觉,但未见得所有观点都能从应用开发和软件管理出发
这篇文章也是反复说两点吞异常和接口污染
分开说
1.吞异常是态度问题。
下级来异常,要么扩展接口向上抛,要么代码吞,如果吞了,至少说明他认为问题应中止于此,也不需要做什么,如果不应该他消化的他也照吞只为了图简便,那还是开了他吧。
这样的人更不会好好对待下层上来的和自身的unchecked exception,也不用指望他能好好注明文档。应该止于此处的excpetion很可能就被轻而易举抛到上层,而上层对这种可能性一无所知,毫无保护,因为这样的人懒得要吞checked异常就更不会为下面那些很难估计的unchecked去考虑完善文档,指望测试搞定这些不可预计的异常?拉到吧,国内绝大部分公司连ifelse支路测试覆盖都过不了80%,就别谈哪些unchecked异常了

2.接口污染
确实有这个问题,异常成为了接口一部分会影响上层
但是你要明白,checked 异常和返回类型、函数签名一样,你用了,就已经被侵入了,你怎么不质疑为什么函数调用返回不能是obj或者void*,我自己决定转不转型,你返回你的类型不是强迫我import或者include返回值类型定义吗?这不是服务端强暴调用端吗?为什么你要有时返回空指针,不能返回空对象,害得调用端还要判断,这不又是强暴吗?

一个接口7,8个异常,这是设计层面的问题
每个层应该有自己的异常,层内部本身应该转义,你给客户看个spring初始化文件读取错误的异常有意义吗?这样即使深层次的嵌套异常也不会爆炸。

因为checked实际已经把异常上升到签名级别就导致侵入是一定的,所以设计必须谨慎,要确认应该由调用这处理异常或者恢复的情况才使用

既然你那么认同公仆论,那干脆也不发你工资了,这个异常你作为runtime向上抛好了,别强求别人catch了,有些人喜欢checkedException,因为这会有当领导的感觉,有哥说了算的感觉。结果苦了调用方。


关于第一点,你只要观察一下现实就知道了。你个人之力能抵得上洪水?一种语言特性加速了这种现象发生岂能只怪人。
这里我已经反复强调了:
对于菜鸟,倒追法好于乱吞,而且一个人反复被追到会使得他建立起对于异常的正确认识。你有何话说?
对于严谨的人来说,checkedException带来麻烦,他被迫需要应对很多他本不能处理的东西。扰乱视听。你有何话说?

最后您能直接回答对这个理念的看法吗?
选择处理什么样的错误是不是调用者的选择权?你出于什么样的理论或理念能支撑你侵犯这个选择权?

0 请登录后投票
   发表时间:2011-03-21  
除了自大,或者类似于本朝公仆,事实没有什么理念能支撑你这么做,因为你已经考虑你模块以外的事情,当你在想这个他必须要处理那个他必须怎样时,你已经越过界线,已经把自己扮演上帝角色来指点江山了,而不是做好自己本模块的工作。乍一看你可能还委屈,因为你为劳苦大众好,但是实际上这种趋势反而导致复杂性增加。

0 请登录后投票
   发表时间:2011-03-21  
要确认应该由调用这处理异常或者恢复的情况才使用
————————————————————
请问你怎么确认的了,如果服务方也是你,调用方也是你,你爱咋折腾就怎么折腾,但如果你是发布给别人的API,而且如果公共性很强的话,你就越确认不了了,就像Java标准库里面的情况,也许当初他们也是信誓坦坦的,但最终民意表明不过是他们一厢情愿,自以为是而已。
0 请登录后投票
   发表时间:2011-03-21  
既然你那么认同公仆论,那干脆也不发你工资了,
——————————————
晕,服务方不代表无条件服务的,你让他服务要满足它的前置条件,我们再拿饭店举例子。
你到饭店吃饭至少要满足一个很重要的前置条件,那就是付钱。但是尽管如此,饭店也不会在你进去吃饭前强制你先catch万一没钱做好异常的防御,比如带上头盔以保护万一被揍。
服务当然可以抛出异常,这个异常有些可能是不满足前置条件,有些可能因为其他原因无法完成目标,但是断无强制让调用者必须catch什么,因为这是调用者的事,如果这个异常确实应该要这个调用者处理但是调用者没处理,那也是调用者的责任,与你的模块无关。这才叫清晰职责,这才能降低复杂性,
其实整个社会也是因为契约理念的使用,才使得如此复杂庞大的商业化活动成为可能。如果手互相乱伸的话,势必加大模块之间的依赖关系,最终反而使得复杂性加大,系统难以为继。
0 请登录后投票
   发表时间:2011-03-21  
人类历史在进入长期严格等级制度后,终于有些明白无为而无不为的道理,面对复杂系统,自顶向下,中央严格控制模式(比如计划经济)必败无疑。市场经济对等级制度瓦解是历史上从来没有过的。但是其核心理念是非常微小的。这可能是少即是多的最佳实例。
0 请登录后投票
   发表时间:2011-03-21  
你觉得你吃饭,饭店会没准备catch你吃霸王餐的异常吗
你到赌场也这么想吗
你和老板在到高危地方干活,老板交代你干事会不事先准备应急预案吗?
遇到小异常你可以邮件,可以留纸条,这是老板可忽略事件,结果你在的酒店被炸了,这个异常你还会发邮件或者让别人留个纸条在老板桌上让老板可忽略吗?你如果还是不选择类似电话这种强制应答我就真有点佩服你了。
你让这个问题runtime,ok,结果老板很快也被炸,老板的老板也可能被你老板的忽略弄完蛋

老拿图异常和倒追测试说事,你测试真那么靠谱,吞异常都查不出来吗,明显异常支路没有正确输出,还要等到异常炸到根才能捕捉到?

别动不动谈政经,不懂平衡妥协和多面性根本理解不了这些领域的东西,没有绝对的好和坏,只有适用不适用,什么环境适用不适用
0 请登录后投票
   发表时间:2011-03-21  
ppgunjack 写道
你觉得你吃饭,饭店会没准备catch你吃霸王餐的异常吗
你到赌场也这么想吗
你和老板在到高危地方干活,老板交代你干事会不事先准备应急预案吗?
遇到小异常你可以邮件,可以留纸条,这是老板可忽略事件,结果你在的酒店被炸了,这个异常你还会发邮件或者让别人留个纸条在老板桌上让老板可忽略吗?你如果还是不选择类似电话这种强制应答我就真有点佩服你了。
你让这个问题runtime,ok,结果老板很快也被炸,老板的老板也可能被你老板的忽略弄完蛋

老拿图异常和倒追测试说事,你测试真那么靠谱,吞异常都查不出来吗,明显异常支路没有正确输出,还要等到异常炸到根才能捕捉到?

别动不动谈政经,不懂平衡妥协和多面性根本理解不了这些领域的东西,没有绝对的好和坏,只有适用不适用,什么环境适用不适用

你有没有发现你举得例子,都是你到什么什么地方如何如何,你注意是你到。。。。。,即你在扮演调用者而不是服务者,你调用者认为这里有不安全你预先catch,这有什么问题,这本来就是调用者的选择权,关键是那些服务的地方有没有强迫你catch什么。
0 请登录后投票
   发表时间:2011-03-21  
老拿图异常和倒追测试说事,你测试真那么靠谱,吞异常都查不出来吗,明显异常支路没有正确输出,还要等到异常炸到根才能捕捉到?
————————————————————
当然是异常报告出来才容易发现问题,吞了异常,只是程序发生没按预期的行为走,如果情况复杂的话,查起来当然麻烦。
0 请登录后投票
   发表时间:2011-03-21  
别动不动谈政经,不懂平衡妥协和多面性根本理解不了这些领域的东西,没有绝对的好和坏,只有适用不适用,什么环境适用不适用
————————————————————
你是老马fans,我可不是,我反老马比反CheckedException还坚决。中国人是很会玩弄政治,就是你所谓艺术性确实很高,但是这只是让社会增加内耗,商业社会越发达的地方信用越高。
0 请登录后投票
论坛首页 Java企业应用版

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