異常處理 Exception(三)

2021-09-07 16:18:50 字數 2762 閱讀 2899

最近有點事,把這個系列給落下了,給大家道個歉,這裡還要感謝我的老婆,謝謝她一直對我的支援:)

系列回顧:

1.異常處理--exception(一)

2.異常處理—exception(二)

通知方式

說明

email

這是最常見也是最方便的一種通知方式。

優點:使用簡單

缺點:需要依賴於smtp伺服器等

sms

這也是目前比較流行的通知方式,不過一般不會把所有資訊都通過簡訊進行傳送,可以選幾個比較關鍵的exception進行sms通知。

缺點:字數、閘道器、介面等限制。

優點:及時性

post

通過某種服務,對客戶端進行post exception。

優點:及時性(不過依賴於客戶端)

缺點:需要編寫安全的客戶端程式。

get

跟post優點類似,但需要把exception先存到某個地方,然後get的時候獲取。

other

還有很多通知的方式,這個取決於大家的需求了。

一般我們常用的是前2種方式,因為編寫還算簡單,sms的介面現在也有很多了。

注:如果在你的程式種有

email

傳送程式的話,我建議您還是不要使用相同的配置進行傳送,建議重新建立乙個新的配置,包括傳送方式都使用乙個新的方法。

這裡值得注意的是,當你的email通知方式丟擲異常時,請一定要使用另外一種方式進行通知,因為此時可能你的**已經發生了不可忽視的異常了。

通知的資訊內容比較簡單,如果是email傳送方式,就可以使用log的log資訊進行傳送,如果sms的話,你可以使用模板,或者固定格式進行傳送。

通知的內容不是很多,下面來討論一下 try / catch

這個問題本來先前就想說的,前幾天也看到楊兄弟的「

請討論try...catch..寫在不同地方,有何利害?

」其中討論的非常激勵,很多人說的都比較正確,使我覺得或許我的方案不是最好的,但我決定還是把我的看法寫出來,這樣才能大家一起來進行討論。老趙說在內部類的時候最好也能把異常捕捉後,進行封裝然後再丟擲,不過我個人覺得,如果是類庫的話,還是不要去catch,這是為什麼呢?

我認為,類庫中的方法是我們程式的最小單元,它的存在是為了我們高層的呼叫,它的存在必有它的意義,就算它內部呼叫其他類庫的方法(大多會呼叫fcl),我們最好不要去catch掉,不過某些時候你可能要違反這個規則,但請記住,封裝好你的異常,然後throw到高層,那樣才能不遺漏你的程式發生的exception。類庫中的方法,如果會呼叫很多其他類庫的方法時,你應該考慮你的這個類庫或許已經存在了幾種可能性改變你的結果了,你該好好的重新設計你的方法。

現在說說我的觀點,一般我們的**會使用三層架構,不過為了解除業務邏輯與頁面層的耦合,我們會借助某些模式,以降低它的耦合度。(自己的想法,或許某些概念會錯誤)

我們的**大多是對資料庫的i、u、d、s的操作,所以資料層基本已經屬於了底層類庫,業務層進行呼叫,ui層進行顯示資訊。(那我們是不是對資料層的異常不進行處理呢?也不一定,如果按照我先前說的,最好是不要在底層進行處理,沒有錯,但我們不能太絕對,還是根據你的專案來分析後進行安排吧。)

有人會說在資料層,我們會使用ado等方法,會與資料庫進行一定的聯絡,其中就會丟擲各種異常,難道我們不要去處理嗎?是的,如果可能,請不要在這裡進行處理,我的方案是,去業務層進行捕捉和處理。

業務層我們是不是去把所有異常都處理了呢?請不要這樣設想,因為有些異常不是你能全部處理的,我們應該把我們能預知的,我們需要的異常進行處理(姑且把我們的處理程式定義為exceptionmanager)丟到exceptionmanager中進行處理。但我們有時需要丟擲一些exception message給使用者,所以這些異常,請封裝好,繼續往高層throw,這時,請不要把異常丟到

exceptionmanager

中,因為後面我們會有其他地方進行處理的。

到此,輪到我們的ui層了,ui層直接面對的是使用者,在我們先前說的,我們必須記錄下我們的異常,讓後給使用者呈現乙個友好的使用者介面,那樣才是做**的王道。在web.config中,可以設定發生錯誤時所呈現的乙個頁面url,雖然這麼做可以給使用者乙個好的友好介面,但有時,我們需要給使用者提供更多的資訊,比如請輸入使用者名稱等,這時候config配置的頁面就無法達到我們的要求了,那我們該如何來做呢?

其實很簡單,使用乙個httpmodule就可以了,在這個module中不要牽涉到其他任何東西,因為在asp.net中,乙個請求的順序會把你所有的module都會執行一次,所以不必擔心.net會遺漏,我們只需要配置好就可以了。那我們這個module只要做哪些工作呢?只需要處理未處理的異常,首先看一段**:

第三篇就說到這裡吧,接下來後面將會把自定義異常、處理的**給大家說明一下。

出處:

Exception異常處理

1.exception 前言 在ios裡對異常的處理及捕獲,並沒有其它語言裡那麼常見,相信很多ios程式設計師都知道,更多的時候是對記憶體的的檢測與分析,檢測相關記憶體方面的問題。捕獲後傳送至伺服器,並且友好提示使用者錯誤,或則直接回滾到使用者操作前,阻止應用程式的崩潰。2.exception處理 ...

異常處理 Exception

一 異常類 1 在c 中所有的異常都是使用乙個異常型別的示例物件表示的,這些異常型別都是繼承自system.exception型別,或者直接使用system.exception型別的例項物件 2 在c 中,位於finally塊中的 可以保證不管 是正常結束,還是進入異常處理 塊,其中的語句均會被執行...

C 異常處理 三 exception類

1,exception 標頭檔案 include c 可以把它用作其它異常類的基類。可以引發exception異常,也可以把exception用作基類,在從exception派生而來的類中重新定義乙個名為what 的虛擬成員函式,它返回乙個字串,該字串隨實現而異。include class bad ...