|
在上一篇中"一個被人遺忘的角落"中,跟大家簡單介紹了一下Exception,也使大家充分的了解了Exception管理在一個項目中的重要性,那如何在我們的項目中處理異常呢?因為我從事的是Web開發,所以我只跟大家討論Web的解決方案,Win的解決方式,還希望同大家一起探討。
上一章中我們了解了異常發生的原因,同時也說了不存在沒有bug的程序,任何網站都會遇到各種各樣的問題,無論是大網站還是小網站都會存在,但大公司和小公司對待異常的態度全然不同,一個是主動出擊,一個是守株待兔,我們是好的開發者,我們不能坐以待斃,我們必須主動出擊。好了,廢話少說,切入主題。
現在網站一般都采用多層開發,多層開發的時候,我們應該在哪里處理異常、在拋出異常呢?微軟的意見是類庫的開發人員盡量不要處理異常,類庫的編寫應該按照正常的邏輯去編寫,當然也有例外,注意事項可以參見"設計異常解決方案的幾點注意事項 ",好的,按照規范,我們應該盡量在高層進行捕捉和處理,那我們該怎么捕捉,捕捉后怎么處理,捕捉哪些異常呢?雖然微軟提供了很多系統異常,但是這些異常只是負責拋出相關的信息,并沒有為記錄下來,或者出現高級異常的時候,及時通知我們,這樣的做法還是守株待兔,我們還是應該主動的對其進行處理。好在微軟讓我們可以自由的創建自定義的Exception,最好是設定一個自定義Exception基類,讓你的其他自定義Exception都繼承這個類,以便今后更好的擴展。拋出異常其實是性能消耗很大的操作,但是Richer教父說過,拋出異常的性能和你程序的穩定性相比,就變得非常渺小了。所以我們還是偏向于穩定性。因為處理異常的性能消耗,只是在異常發生時才產生,所以性能方面的問題,我們可以忽略了。(或許這話比較拗口,但相比系統的性能,我更趨向于系統的穩定)
如何創建一個自定義的Exception?
不得不說微軟考慮的太周到了,要創建一個自定義的Exception是非常簡單的。打開VS,創建一個項目,然后添加一個類,在namespace范圍內,輸入Exception,然后2下Tab,VS就自定幫您創建一個自定義的Exception了。Exception的相關屬性和方法,可以參見MSDN。不過自動創建的Exception都是繼承System.Exception的,按照微軟當初的設想,自定義的異常應該繼承System.ApplicationException (可笑的是,微軟自己都沒有遵守這個約定)。我們設定這個作為我們的Exception基類 MyBaseException。
代碼片斷:
[global::System.Serializable]
public class MyBaseException : ApplicationException
{
public MyBaseException() { }
public MyBaseException(string message) : base(message) { }
public MyBaseException(string message, Exception inner) : base(message, inner) { }
protected MyBaseException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
NET技術:一個讓人遺忘的角落—Exception(二),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。