码迷,mamicode.com
首页 > 其他好文 > 详细

Atitit.异常处理 嵌套  冗长的解决方案

时间:2016-09-07 01:37:39      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 

 

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.异常处理 嵌套  冗长的解决方案

标签:

原文地址:http://www.cnblogs.com/attilax/p/5847606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!