Atitit.異常處理 嵌套  冗長的解決方案

来源:http://www.cnblogs.com/attilax/archive/2016/09/06/5847606.html
-Advertisement-
Play Games

Atitit.異常處理 嵌套 冗長的解決方案 1. 異常處理的需要改進的地方1 2. +異常設計的初衷是, 在程式中出現錯誤時, 由程式自己處理錯誤, 儘量不要以exit(0)這種粗暴的方式中止程式. 1 3. 正常流程和異常流程的分離。2 4. “是藥三分毒”, 任何事物有缺點,異常也是2 5. ...


 

 

 

 

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:[email protected]

轉載請註明來源: 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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用php和mysql開髮網站的話,phpmyadmin是一個非常友好的mysql管理工具,並且免費開源,國內很多虛擬主機都自帶這樣的管理工具,配置很簡單,接下來在linux伺服器上配置phpmyadmin來管理MySQL資料庫 首先訪問phpmyadmin官網首頁,網址為:http://www.p ...
  • Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you ...
  • 在編譯FFmpeg的時候,用./configure 進行配置,經常會出現找不到庫文件的情況,原因大概就兩個: 1、沒有安裝庫文件或者安裝的庫文件版本不對 2、FFmpeg沒有找到庫文件 前者的問題好解決,只要安裝相應的庫就好了,但是安裝好相應的庫以後,一般還會掉入後者那個坑。 後者要解決也很簡單,只 ...
  • 在Java 8 之前,HashMap和其他基於map的類都是通過鏈地址法解決衝突,它們使用單向鏈表來存儲相同索引值的元素。在最壞的情況下,這種方式會將HashMap的get方法的性能從O(1)降低到O(n)。為瞭解決在頻繁衝突時hashmap性能降低的問題,Java 8中使用平衡樹來替代鏈表存儲衝突 ...
  • 這次說一說面向對象與面向過程的區別以及面向對象的優點。 聽一聽用面向過程思想編程的程式員寫程式時的心聲:What are the things this program has to do? What procedures do we need? 啊哈,作為一名合格的準java程式員的我的想法是:W ...
  • 線程池(Thread Pool)對於限制應用程式中同一時刻運行的線程數很有用。因為每啟動一個新線程都會有相應的性能開銷,每個線程都需要給棧分配一些記憶體等等。 我們可以把併發執行的任務傳遞給一個線程池,來替代為每個併發執行的任務都啟動一個新的線程。只要池裡有空閑的線程,任務就會分配給一個線程執行。線上 ...
  • 在本人的上一篇博客文章:Netty構建分散式消息隊列(AvatarMQ)設計指南之架構篇 中,重點向大家介紹了AvatarMQ主要構成模塊以及目前存在的優缺點。最後以一個生產者、消費者傳遞消息的例子,具體演示了AvatarMQ所具備的基本消息路由功能。而本文的寫作目的,是想從開發、設計的角度,簡單的 ...
  • 什麼是面向對象?如果讓我理解,只有一句話:它是一個與面向過程相對的概念。人們所設計的程式幾乎都是線性思維,即一步一步往下執行。對於一個沒有人機交互的程式來說,這是簡單易行的。然而,對於一個人機交互頻繁的程式來說,比如某個你所熟悉的游戲,這絕對是一個毀滅性的災難。未完待續。。。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...