第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java或C#中異常管理的最佳實踐

Java或C#中異常管理的最佳實踐

手掌心 2019-07-29 10:24:21
Java或C#中異常管理的最佳實踐我一直在決定如何在我的應(yīng)用程序中處理異常。如果我的異常問題來自1)通過遠(yuǎn)程服務(wù)訪問數(shù)據(jù)或2)反序列化JSON對象。不幸的是,我不能保證這些任務(wù)中的任何一個都成功(切斷網(wǎng)絡(luò)連接,不正確的JSON對象,這是我無法控制的)。因此,如果我遇到異常,我只需在函數(shù)內(nèi)捕獲它并返回FALSE給調(diào)用者。我的邏輯是,所有調(diào)用者真正關(guān)心的是任務(wù)是否成功,而不是為什么它不成功。這是典型方法的一些示例代碼(在JAVA中)public boolean doSomething(Object p_somthingToDoOn){     boolean result = false;     try{         // if dirty object then clean         doactualStuffOnObject(p_jsonObject);         //assume success (no exception thrown)         result = true;     }     catch(Exception Ex)     {         //don't care about exceptions         Ex.printStackTrace();     }     return result;}我認(rèn)為這種方法很好,但我真的很想知道管理異常的最佳實踐是什么(我應(yīng)該在調(diào)用堆棧中一直冒出異常嗎?)。總結(jié)關(guān)鍵問題:是否可以捕獲異常但不會冒泡或正式通知系統(tǒng)(通過日志或通知用戶)?對于不會導(dǎo)致所有需要try / catch塊的異常的最佳實踐有哪些?跟進(jìn)/編輯感謝所有反饋,在網(wǎng)上找到了一些關(guān)于異常管理的優(yōu)秀來源:異常處理的最佳實踐| 奧萊利媒體.NET中的異常處理最佳實踐最佳實踐:異常管理(文章現(xiàn)在指向archive.org副本)異常處理反模式似乎異常管理是根據(jù)上下文而變化的事情之一。但最重要的是,人們應(yīng)該如何管理系統(tǒng)中的異常。另外注意通過過多的嘗試/捕獲代碼腐爛或不給予例外它的尊重(例外是警告系統(tǒng),還需要警告什么?)。此外,這是m3rLinEz的一個很好的選擇評論。我傾向于同意Anders Hejlsberg和你的看法,大多數(shù)來電者只關(guān)心操作是否成功。從這個評論中,它提出了一些在處理異常時要考慮的問題:拋出此異常有什么意義?處理它有什么意義?呼叫者是否真的關(guān)心異常,還是只關(guān)心呼叫是否成功?是否強(qiáng)制調(diào)用者管理潛在的異常優(yōu)雅?你是否尊重這種語言的含義?你真的需要返回像布爾這樣的成功標(biāo)志嗎?返回boolean(或int)更像是一種C思維模式,而不是Java(在Java中你只是處理異常)。遵循與語言相關(guān)的錯誤管理結(jié)構(gòu):)!
查看完整描述

3 回答

?
炎炎設(shè)計

TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊

對我來說,想要捕獲異常并將它們轉(zhuǎn)換為錯誤代碼似乎很奇怪。為什么在后者是Java和C#中的默認(rèn)值時,您認(rèn)為調(diào)用者更喜歡錯誤代碼而不是異常?

至于你的問題:

  1. 您應(yīng)該只捕獲實際可以處理的異常。在大多數(shù)情況下,捕獲異常并不是正確的做法。有一些例外(例如,線程之間的日志記錄和編組異常),但即使對于這些情況,通常也應(yīng)該重新拋出異常。

  2. 你的代碼中絕對不應(yīng)該有很多try / catch語句。同樣,我們的想法是只捕獲您可以處理的異常。您可以包含一個最頂層的異常處理程序,將任何未處理的異常轉(zhuǎn)換為對最終用戶有用的東西,但是否則您不應(yīng)該嘗試捕獲每個可能位置的每個異常。


查看完整回答
反對 回復(fù) 2019-07-29
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗 獲得超4個贊

這取決于應(yīng)用和情況。如果你構(gòu)建一個庫組件,你應(yīng)該冒出異常,盡管它們應(yīng)該被包裝成與你的組件一起上下文。例如,如果您構(gòu)建一個Xml數(shù)據(jù)庫并假設(shè)您正在使用文件系統(tǒng)來存儲數(shù)據(jù),并且您正在使用文件系統(tǒng)權(quán)限來保護(hù)數(shù)據(jù)。您不希望冒出一個FileIOAccessDenied異常,因為它會泄漏您的實現(xiàn)。相反,您將包裝異常并拋出AccessDenied錯誤。如果您將組件分發(fā)給第三方,則尤其如此。

至于是否可以吞下例外。這取決于你的系統(tǒng)。如果您的應(yīng)用程序可以處理故障情況,并且通知用戶失敗的原因沒有任何好處,那么請繼續(xù),盡管我強(qiáng)烈建議您記錄失敗。我總是覺得很難打電話來幫助解決問題并發(fā)現(xiàn)他們正在吞下異常(或者替換它并拋出新的異常而不設(shè)置內(nèi)部異常)。

一般來說,我使用以下規(guī)則:

  1. 在我的組件和庫中,如果我打算處理它或基于它做某些事情,我只會捕獲異常?;蛘?,如果我想在異常中提供其他上下文信息。

  2. 我在應(yīng)用程序入口點(diǎn)或盡可能高的級別使用常規(guī)try catch。如果異常到達(dá)此處,我只需記錄它并讓它失敗。理想情況下,異常永遠(yuǎn)不會到達(dá)此處

我發(fā)現(xiàn)以下代碼是一種氣味:

try{
    //do something}catch(Exception){
   throw;}

像這樣的代碼沒有任何意義,不應(yīng)該包括在內(nèi)。


查看完整回答
反對 回復(fù) 2019-07-29
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊

我想就這個主題推薦另一個好的來源。這是對C#和Java,Anders Hejlsberg和James Gosling的發(fā)明者的訪談,分別是關(guān)于Java的Checked Exception的主題。

失敗和例外

頁面底部還有很多資源。

我傾向于同意Anders Hejlsberg和你的看法,大多數(shù)來電者只關(guān)心操作是否成功。

Bill Venners:您提到了關(guān)于已檢查異常的可擴(kuò)展性和版本控制問題。你能澄清這兩個問題的含義嗎?

Anders Hejlsberg:讓我們從版本開始,因為問題很容易在那里看到。假設(shè)我創(chuàng)建了一個聲明它拋出異常A,B和C的方法foo。在foo的第二個版本中,我想添加一些功能,現(xiàn)在foo可能會拋出異常D.這對我來說是一個徹底的改變。將D添加到該方法的throws子句中,因為該方法的現(xiàn)有調(diào)用者幾乎肯定不會處理該異常。

在新版本中向throws子句添加新異常會破壞客戶端代碼。這就像在界面中添加方法一樣。在發(fā)布接口之后,它實際上是不可變的,因為它的任何實現(xiàn)都可能具有您要在下一個版本中添加的方法。所以你必須創(chuàng)建一個新的界面。與異常類似,您可能必須創(chuàng)建一個名為foo2的全新方法,該方法會拋出更多異常,或者您必須在新foo中捕獲異常D,并將D轉(zhuǎn)換為A,B或C.

Bill Venners:但是你不是在這種情況下破壞他們的代碼,即使是在沒有檢查異常的語言中嗎?如果foo的新版本將拋出一個客戶應(yīng)該考慮處理的新異常,那么他們的代碼是不是因為他們在編寫代碼時沒有預(yù)料到異常這一事實?

Anders Hejlsberg:不,因為在很多情況下,人們并不關(guān)心。他們不會處理任何這些例外情況。它們的消息循環(huán)周圍有一個底層異常處理程序。那個處理程序只是打開一個對話框,說明出了什么問題并繼續(xù)。程序員通過在任何地方編寫try finally來保護(hù)他們的代碼,因此如果發(fā)生異常他們將正確退出,但他們實際上并不感興趣處理異常。

throws子句,至少它在Java中的實現(xiàn)方式,并不一定會強(qiáng)制您處理異常,但如果您不處理它們,它會強(qiáng)制您確切地確認(rèn)哪些異常可能會通過。它要求您捕獲聲明的異?;?qū)⑺鼈兎旁谀约旱膖hrows子句中。為了解決這個問題,人們做了荒謬的事情。例如,他們用“拋出異常”來裝飾每個方法。這完全打敗了這個功能,你只是讓程序員寫了更多的gobbledy gunk。這對任何人都沒有幫助。

編輯:添加了有關(guān)轉(zhuǎn)換的更多詳細(xì)信息


查看完整回答
反對 回復(fù) 2019-07-29
  • 3 回答
  • 0 關(guān)注
  • 550 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號