搜尋
首頁後端開發C#.Net教程.NET框架-異常設計原則詳解

前沿

  異常設計準則,參考微軟msdn,結合自己的理解和過去的開發中對異常錯誤的處理,總結下軟體開發架構,如何更好地設計一套異常錯誤準則。

介紹準則

execution failure概念

The meaning of execution failure: execution failure occurs whenever a member cannot do what it was designed to do (what the member name implies). For example, if the OpenFile method cannot return an opened file handle to the caller, it would be considered an execution failure.

##操作失敗的意思:無論何時一個成員模組不能完成它預期的任務時,就稱為發生了一次操作失敗。例如OpenFile方法不能給caller一個開啟檔案的句柄,這就是一個操作失敗。

架構中處理異常

In the Framework, exceptions are used for all error conditions, including execution errors.

#翻譯:

在框架中,異常被用來處理所有的錯誤條件,包括執行錯誤。

總結準則

  哪些方法在設計異常時應該被禁止,哪些應該要without hesitation to do,哪些需要考慮,都列在下方的表格中。

編號方法做法1#2#34567#8#910

  
  對第4條做說明:

In daily coding, consider the Tester-Doer pattern for members that may throw exceptions in common scenarios to avoid perance problems related to exceptions. The Tester-Doer pattern pides a call that might throw exceptions into two parts: a Tester and a Doer. The Tester performs a test for the state that can cause the Doer to throw an exception . The test is inserted just before the code that throws the exception, thereby guarding against the exception. 來自http://blog.csdn.net/troubleshooter/article/details/18401491

# # 程式碼:

Tester和Doer各司其職,完美的減少了異常拋出,提升效能。

Doer:上面的狀態
監控是好的,才能DoProcess()處理;如果是false,並且如果DoProcess()中包含DoCheck()邏輯,則會拋出異常,但是這樣分分開後,DoProcess()將不會拋出異常!

if(DoCheck()==true)//这是Tester:状态监测
    DoProcess();
  軟體開發常見異常及處理方式(自行總結)

1

UI層暴露出的操作接口,建議包裹try{}catch{}塊

,catch中將拋出的異常寫入到磁碟中。 2 UI層中用到計時器時,

計數器的回呼函數出現異常後,要stop掉計時器

,防止錯誤日誌一直寫入檔案。 3

底層建議不包裹try{}catch{}塊

,建議用throw直接拋出異常,因為UI層上包裹了try{}和catch{}塊,所以沒必要寫在這些層。 4 throw會直接中斷以後操作,跳到所屬堆疊外層包裹try{}和catch{},即UI層,利用這個性質,

一般建議函數不要回傳錯誤碼

5 處理批次匯入的資料時,局部出現異常。 Excel導入人員,設備,計劃,物料,工藝等,如果某一行資料違規了,這時候不建議拋出異常,因為一旦拋出異常,意味著後面行的資料導入不進來,並且已經導入進去的成為髒數據。

  一般有兩種做法:某行出現違規數據,記錄到日誌文件中,日後根據這個文件查到那條數據未導入,然後單獨處理這一行即可;

在導入前,直接檢查所有行的資料是否合法,檢查無誤後,再一一導入
,否則直接彈出提示,任何資料都寫不到資料庫。 一般建議後者做法。這種做法稱為:Tester-Doer異常模式,也是微軟建議的做法。 6 處理看板展示數據,局部出現異常。這個處理模式跟5是有區別的,一般此時出現異常,往往採取5的前者做法:

展示出正確的數據,違規的數據寫入到日誌中,留待查看

;但是也有可能,如果展示的介面,主要的資料不存在,則直接拋出異常,寫入日誌,透過日誌解決。因此要根據資料的異常嚴重程度去處理。 7 根據開發文件、日誌,分析,

盡量做到能夠找到某個功能未實現的原因

。首先要保留好開發文檔,查看使用者現在的要求是不是和開發文檔中的一致。如果一致,此時日誌的作用就顯示出來了,例如,匯總一周內所有工序的完工餅狀圖,如果一條工序數據都沒有,那麼餅狀圖可能就沒有,在開發過程中,如果檢查了是不是存在工序,如果沒有找到一條工序,可能會拋出異常,然後寫入日誌地話,原因就會找到。因此這類問題,也要寫入日誌,儘管它不是錯誤,但可以歸為異常。 8 函數傳回一個對象,其方法和屬性被後續邏輯引用。這是不可避免的!並且大部分功能的實作都依賴於此。傳回的這個物件因為要被後續引用,所以

建議做null比較,如果為null,是傳遞給UI層,彈出訊息提示,還是直接拋出異常,UI層處理後寫入日誌,視情況而定。

回傳錯誤代碼 禁止
執行錯誤,要拋出例外;如OpenFile()未傳回檔案句柄 建議
假如程式碼再繼續執行就變得不安全時,考慮是呼叫System.Environment.FailFast終止進程還是拋異常。 考慮
如果有可能的話,在正常的控制流處,拋異常,見下面的分析 禁止
拋異常對效能的影響。 考慮
協定中納入異常處理部分 建議
將異常作為回傳值傳回 禁止
使用異常產生器方法,為避免程式碼膨脹, 用helper方法建立異常和屬性. 考慮
異常篩選器中拋出異常. 禁止
從finally 區塊中顯示地拋出例外 禁止

以上是.NET框架-異常設計原則詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C#作為多功能.NET語言:應用程序和示例C#作為多功能.NET語言:應用程序和示例Apr 26, 2025 am 12:26 AM

C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

C#.NET用於網絡,桌面和移動開發C#.NET用於網絡,桌面和移動開發Apr 25, 2025 am 12:01 AM

C#和.NET適用於Web、桌面和移動開發。 1)在Web開發中,ASP.NETCore支持跨平台開發。 2)桌面開發使用WPF和WinForms,適用於不同需求。 3)移動開發通過Xamarin實現跨平台應用。

C#.NET生態系統:框架,庫和工具C#.NET生態系統:框架,庫和工具Apr 24, 2025 am 12:02 AM

C#.NET生態系統提供了豐富的框架和庫,幫助開發者高效構建應用。 1.ASP.NETCore用於構建高性能Web應用,2.EntityFrameworkCore用於數據庫操作。通過理解這些工具的使用和最佳實踐,開發者可以提高應用的質量和性能。

將C#.NET應用程序部署到Azure/AWS:逐步指南將C#.NET應用程序部署到Azure/AWS:逐步指南Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

C#.NET:強大的編程語言簡介C#.NET:強大的編程語言簡介Apr 22, 2025 am 12:04 AM

C#和.NET的結合為開發者提供了強大的編程環境。 1)C#支持多態性和異步編程,2).NET提供跨平台能力和並發處理機制,這使得它們在桌面、Web和移動應用開發中廣泛應用。

.NET框架與C#:解碼術語.NET框架與C#:解碼術語Apr 21, 2025 am 12:05 AM

.NETFramework是一個軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發。 2.C#設計用於.NETFramework,支持現代編程功能。 3..NETFramework通過CLR管理代碼執行,C#代碼編譯成IL後由CLR運行。 4.使用.NETFramework可快速開發應用,C#提供如LINQ的高級功能。 5.常見錯誤包括類型轉換和異步編程死鎖,調試需用VisualStudio工具。

揭開c#.net的神秘面紗:初學者的概述揭開c#.net的神秘面紗:初學者的概述Apr 20, 2025 am 12:11 AM

C#是一種由微軟開發的現代、面向對象的編程語言,.NET是微軟提供的開發框架。 C#結合了C 的性能和Java的簡潔性,適用於構建各種應用程序。 .NET框架支持多種語言,提供垃圾回收機制,簡化內存管理。

C#和.NET運行時:它們如何一起工作C#和.NET運行時:它們如何一起工作Apr 19, 2025 am 12:04 AM

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。