首页 > 代码库 > Atitit.异常处理 嵌套 冗长的解决方案
Atitit.异常处理 嵌套 冗长的解决方案
Atitit.异常处理 嵌套 冗长的解决方案
1. 异常处理的需要改进的地方1
2. +异常设计的初衷是, 在程序中出现错误时, 由程序自己处理错误, 尽量不要以exit(0)这种粗暴的方式中止程序. 1
3. 正常流程和异常流程的分离。2
4. “是药三分毒”, 任何事物有缺点,异常也是2
5. 共存取长补短,协同使用2
6. Solu:事件化处理3
7. ref3
1. 异常处理的需要改进的地方
为了表述方便,下面将主调函数称为“父函数”,被调函数称为“子函数”,以“祖”、“父”、“子”、“孙”等来形容函数之间的调用关系。
一个父函数为什么要调用子函数?因为它知道子函数可以实现某种功能,但父函数根本就不关心子函数是如何实现的,子函数只需向父函数报告结果成功与否。谁知这子函数又调用了孙函数,而这孙函数抛出了一个异常。
那么这个异常该由谁来处理呢?难道要它的祖函数来处理吗?根本不可能。祖函数根本就不知道孙函数是个什么东西,甚至根本不知道有这么一个孙函数的存在,你让它如何去处理这个异常?
一个父函数既然调用了子函数,就应该对这个子函数的行为负全部责任,绝不能把子函数造成的结果交给祖函数处理。所以,处理这个异常的只能是该函数的直接调用者,绝不可越级。
异常处理机制的引入,完全破坏了这个原则。于是,一个父函数,它不但必须了解子函数的行为,还必须了解孙函数、曾孙函数、玄孙函数的种种行为。简直就是不可能的。
2. +异常设计的初衷是, 在程序中出现错误时, 由程序自己处理错误, 尽量不要以exit(0)这种粗暴的方式中止程序.
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
3. 正常流程和异常流程的分离。
另外,(萧筱雨)同志说:C()抛出的异常,应该在B()中处理,即使不好处理,也要转化成B()的异常抛出。
既然如此,那请问这种处理方法与用返回值逐层返回相比,有什么优点?
优点我已经说了,那就是正常流程和异常流程的分离。
4. “是药三分毒”, 任何事物有缺点,异常也是
药可治病,也可致病,说的就是事物矛盾的两重性
。因为药有毒而否认药的价值从而不用它,这达不到治病的目的。矛盾的两重性还告诉我们,对事物进行完全肯定或者否定通常是不正确的,因为还存在着一个科学运用的问题
事物的存在都有其存在的道理,任何事物都是矛盾的统一体,C++中的异常处理也不例外。
由于人们的立场或者视野不同,对于同一事物的看法往往不会是完全相同的,有时甚至会完全相反。由此,就会产生争论
5. 共存取长补短,协同使用
“是药三分毒”,药可治病,也可致病,说的就是事物矛盾的两重性。因为药有毒而否认药的价值从而不用它,这达不到治病的目的。矛盾的两重性还告诉我们,对事物进行完全肯定或者否定通常是不正确的,因为还存在着一个科学运用的问题
其实C++中的异常处理只是另一种形式的错误处理方式,和传统的错误处理方式并不排斥,他们是一种“共存”的关系。只是因为在某些方面或者某些时候,使用异常处理方式比传统的错误处理方式更具优越性,所以异常处理才有了使用的必要,它的存在也才是合理的。
才不会因噎而废食,因为异常处理存在着使用的局限性就否认其价值,才能知道什么情况下使用异常处理比较合适,什么情况下使用异常处理方式和传统错误方式都可以,而什么情况下最好不要使用异常处理,等等。
最后的建议就是:明智地使用异常处理。
6. 冗长cde
orm.callbackFun=function(data)
{
try{
processJavaEx_V2q315(data);
}catch(e)
{
if(catchEx(e,"com.attilax.user.NotLoginEx"))
{
logx("not login");
//window.location=;
return;
//
}
}
var json=str2json(data);
var obj=json[0];
var fm=new AForm()
fm.bind(obj);
};
7. Solu:事件化处理
8. ref
改进异常处理的6条建议 - Dancen的专栏 - 博客频道 - CSDN.NET.html
Atitit.异常处理 嵌套 冗长的解决方案