程式構造的過程中,要有程式最終的標準: 可靠性、可用性是我比較關注的兩個方面。其中可靠性又分為異常處理和資料完整性兩個方面。
異常處理,老生常談,我認為它是乙個開發人員整體邏輯思維,開發模式,個人性情的體現。程式是邏輯的集合,達到正常功能性的開發只能是初級的目標。完善的異常處理才是綜合能力的體現。
綜上,異常處理應該以做到清晰,簡單,友好為目標。這裡,我總結下自己對於異常處理的理解和自己經常使用的一些方式。
在開發的過程中,我經歷過以下幾個階段的異常處理方式:
考慮異常處理功能的時候,首先就想到了統一處理的方式,統一管理是人類社會中經常用到的事務處理模式,集中之後,可以充分發揮標準化,規模化的作用。
下面以winform客戶端為例,統一捕捉異常方式如下,在
program.cs
中註冊如下事件
:// 統一異常處理
在處理程式中進行異常統一處理,記錄日誌:
///
/// ui執行緒系統異常處理
///
// 新增日誌
logmanager.instance.error($"系統執行期間捕獲異常資訊,資訊如下:");
///
/// 應用程式域異常
///
private static void currentdomain_unhandledexception(object sender, unhandledexceptioneventargs e)
string exmessage = (e.exceptionobject as exception).message;
// 新增日誌
logmanager.instance.error($"系統執行期間捕獲異常資訊,資訊如下:");
以上方式存在幾個問題:
關鍵業務異常處理流程和非關鍵的混在一起,無法對一些關鍵異常進行強保證;
異常日誌放到乙個檔案中,難以定位問題。
通過閱讀《effective c#》(結合實際開發經驗,對異常進行分類勢在必行。
異常可分為三類:普通異常,強資料保證異常(資料完整性考慮
),無異常處理。
普通異常:程式執行過程中未被處理的異常或者是影響較小的異常,只需要記錄異常日誌即可。
強資料保證異常:對業務來說的關鍵資料,處理失敗後必須保證原始資料不被破壞,這類異常必須自己處理,不能丟擲到全域性中,開發中採用資料副本進行業務邏輯執行,保留原始資料,發生異常後,對原始資料進行恢復,達到資料回滾的目的。
第2點中,異常處理後的日誌仍然被放到一起,不同的開發有不同的日誌風格,乙個日誌拿出來看,凌亂、定位速度慢。所以有必要對異常進行日誌格式統一,這裡應用到了異常篩選器,統一日誌目前定義格式如下
:異常等級為:【】,異常類:【】,異常方法【】,異常行數:【】,異常原因:【】,業務原因為:【】
通過對exception進行拓展,實現日誌的記錄,詳細**如下:
public static class exceptionextension
// 記錄日誌
public static bool log(this exception e, string info = "", exceptiontype type = exceptiontype.normal)
#region 記錄日誌
stacktrace trace = new stacktrace(e, true);
var classname = trace.getframe(0).getmethod().reflectedtype.fullname; // 類名稱
var methodname = e.targetsite.name; // 方法名稱
var linenumber = trace.getframe(0).getfilelinenumber(); // 行號
logmanager.instance.error($"系統執行產生異常,異常等級為:【】,異常類:【】,異常方法【】,異常行數:【】,異常原因:【】,業務原因為:【】");
#endregion 記錄日誌
return false;
使用如下:
這時候我們談論的都是開發、除錯、維護所應用的異常處理模式,還有乙個很重要的是對客戶友好型的提示,可以進行彈窗,簡訊等方式,分類呈現給客戶。
這一塊內容就需要根據業務進行分析,需要進行不同的處理。
目前,程式開發中,我使用的便是2.3中的異常處理思維和模式,但是學無止境,事無常理,異常處理的方方面面仍然要繼續積累。
開發的心態,謙遜的態度,不斷的汲取知識,結合實際,不斷前行。
的異常處理 C 異常處理總結
做開發不僅僅要考慮到業務邏輯更要在寫 時將各種可能考慮周全,但是這又是很難的事情,畢竟開發就是個人的事,而使用者可能上萬甚至百萬級別。這時,程式的穩定性就極為重要,我們不能讓程式因為某一處執行出問題而就直接導致程式或者產生其他更嚴重的後果,比如 做除法時當除數為零時,陣列訪問越界時,容器capaci...
處理異常總結
總結一下在ray上看到的關於異常的幫助 有兩種崩潰 一種是sigabrt exc crash 一種是exc bad access sigbus or sigsegv sigabrt exc bad access是一種更難除錯的異常,因為它通常是記憶體管理問題 1.注意 錯誤 this class i...
異常處理總結
總的來說異常分為兩種 一 cheked exception 檢查異常 此異常在編譯時候就會檢測出來,我們必須進行捕獲處理。二 unchecked exception 非檢查異常 此異常是在執行期才會丟擲。例如我們常見的nullpointerexception indexoutofbound cept...