.NET架構小技巧(8)——優待異常
阿新 • • 發佈:2022-01-29
天有不測風雲,人有旦夕禍福,程式呢——會有異常錯誤。
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