2011-01-08 23 views
0

哪一個是與UI層的良好結合try-catch和n-tier應用程序中的良好實踐,爲什麼?練習中使用try-catch-finally

1.

try 
    { 
    //Statements 
    } 
    catch 
    { 
     throw 
    } 
    finally 
    { 
    //cleanup codes 
    } 

OR

2.

try 
    { 
     // statements 
    } 
    catch(Exception ex) 
    { 
    } 
    finally 
    { 
    // clean up 
    } 

和在UI層

try{ 
} 
catch(Exception ex) 
{ 
Log(ex); 
} 
finally 
{ 
    //clean up 
} 
+2

可能的重複[Where to put try catch](http://stackoverflow.com/questions/523875/where-to-put-try-catch) – slugster 2011-01-08 11:58:24

回答

2

在第一位的,catchthrow是完全沒有意義的,你應該只使用一個tryfinally如果你想確保清理。

第二個是危險的,永遠不要使用。該代碼不應包含捕捉每個異常的捕獲,並且只是在沒有解釋的情況下忽略它。在極少數情況下,您需要捕獲異常並忽略它,您應該嘗試將其限制爲特定類型的異常,並且您應該始終在解釋爲何忽略異常的代碼中包含註釋。

第三個例子工作正常。我假設您在try塊內部有更多異常處理,捕獲您預期的特定異常類型,並在需要時通知用戶該問題。

1

一種常見的做法是使用的try /最後(或使用聲明)在商業/服務e層確保資源正確清理。

在你可能要長例外物理層邊界,所以你可能有類似以下內容:

try 
{ 
} 
catch(Exception ex) 
{ 
    ... log exception 
    throw; 
} 

也許頂級異常處理程序(的try/catch)在UI層。