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://blog.csdn.net/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