1. 程式人生 > 其它 >.NET架構小技巧(8)——優待異常

.NET架構小技巧(8)——優待異常

  天有不測風雲,人有旦夕禍福,程式呢——會有異常錯誤。

  C#中用try,catch,finally來捕捉處理異常,捕捉誰的異常呢?一般都是系統類庫或三方類庫中丟擲的異常,那如果我自己架構程式,異常也是要好好考慮的一個方面。

  首先要給自己的異常定義好級別,建議按產品(DaMei),專案(His,Lis),模組來(Registered),它們依次是後者的父類,產品的父類是ApplicationException,整理來說是個樹狀結構。這些異常在自己的對應的模組中使用,這樣的好處是,如果需要集中處理一些事務時,可以在父類的構造中進行集中處理,不用細化到每個細節的異常子類中。這樣做還有一個好處是在web專案中,我們可以判斷是自定義的異常,可以進行分類處理,是系統的異常,可以作另一分支處理。

  當然,要整理專案程式碼中,我們儘量不要用拋異常這種相對粗暴的方式來處理,而以業務分支的方式來處理反面分支(如返回false),從而把錯誤或提示體現出來(比如控制檯用Console,winform用MessageBox.Show,web就要返到前端提示了);如果我們是獨立的dll,不知道怎麼提示,有可能呼叫端是winform或web,需要報出錯誤,這時就要用throw的方式來反饋異常了。

  class Program
    {
        static void Main()
        {
            try
            {
                
throw new HisException("his資料庫未初始化!"); } catch (RegisteredException exc) { Console.WriteLine(exc.Message); } catch (HisException exc) { Console.WriteLine(exc.Message); } catch
(DaMeiException exc) { Console.WriteLine(exc.Message); } catch (Exception exc) { Console.WriteLine(exc.Message); } finally { } Console.WriteLine(""); } } /// <summary> /// 大美醫療資訊系統,這是我起的名,整個系統異常類 /// </summary> public class DaMeiException : ApplicationException { public DaMeiException(string message) : base(message) { Console.WriteLine("{0},{1}", DateTime.UtcNow.ToString("yyyy-MM-ss HH:mm:ss"), message); } public DaMeiException() : base() { } } /// <summary> /// His 異常類 /// </summary> public class HisException : DaMeiException { public HisException(string message) : base(message) { } public HisException() : base() { } } /// <summary> /// 掛號模組異常類 /// </summary> public class RegisteredException : HisException { public RegisteredException(string message) : base(message) { } public RegisteredException() : base() { } } /// <summary> /// Lis 異常類 /// </summary> public class LisException : DaMeiException { public LisException(string message) : base(message) { } public LisException() : base() { } }
想要更快更方便的瞭解相關知識,可以關注微信公眾號

****歡迎關注我的asp.net core系統課程****
《asp.net core精要講解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core專案實戰》 https://ke.qq.com/course/291868
《基於.net core微服務》 https://ke.qq.com/course/299524