2009-09-30 23 views
6

私は1日目からこれに苦労しました。おそらく、エラーを処理しないコードにも囲まれているとは限りません。n層アプリケーションのエラーを正しく処理する方法は?

とにかく、私はあなたの伝統的なn層設計のWebFormsで作業しています:UI-> BLL-> DAL。通常、私がしているのは(私はそれが正しいのではないことを知っています)私のデータ操作を試してみることです。例外がある場合は、単にそれを投げつけてバブルアップします。

try 
'db operations 
catch ex as exception 
throw 
finally 
'close connections 
end 

それで、それはBLLまで泡立ち、私はエラーを記録する別のtry/catchがあります。今私は何かが間違っていることをユーザーに警告したいので、再びUIをバブルします。 UIレベルでは、try/catchでラップします。エラーがあれば、わかりやすいメッセージを表示します。

あなたの考えは?私はここで何ができますか?

答えて

5

私が理解しているように、各階層ごとに1つずつ、try/catchが3つあります(DAL、BLL、UI)。

あなたは何かをするときだけをキャッチする必要があります。

私が理解していることから、あなたは単にDALから戻ってくるだけで、それは必要ありません。

BLLからは例外がログに記録されるため、例外に関するデータを収集して最終的にアプリケーションを改善できるため、これは良い習慣です。

次に、例外をユーザーフレンドリーなものに変換するためにUI層を捕まえます。それで大丈夫です。

私はDALレイヤーからtry/catchを取り除くことができます。本当に例外を再試行する以上のことをしないのであれば、

UI例外に渡され、エンドユーザーに表示されるBLLに識別子を追加すると、サポート担当者がサポートされているIDを特定のIdと例外に関連付けることができるようになる場合がありますサーバーのログ

Exponent.Dataコレクションに意味のあるユニークなGuidなどを追加するなど、これを行うことができます。あなたが好きな、UIで例外とキャッチをスローする必要が

+0

DALでエラーが発生した場合、リークを防ぐために接続を閉じる必要はありませんか? – Mike

+0

using {}ブロックに接続/コマンドオブジェクトを置くだけです。 –

+0

「使用」ステートメントを使用している場合は、**明示的に** DALを試してみる必要はありません。カバーの下で、 "使用する"はあなたの接続/コマンドをtry/finallyでラップし、最後にそれらを閉じます。 –

1

... BLL

try 
     { 
      //your code 
     } 
     catch (System.Data.SqlClient.SqlException ex) 
     { 
      if (ex.Number == 547) 
      { 
       throw new Exception("ActiveRecord"); 
      } 
     } 
     finally 
     { 
      MasterConnection.Close(); 
     } 

Catech UIでexecptionおよびshowユーザーフレンドリーメッセージ。

if (e.Exception != null) 
    { 
     if (e.Exception.InnerException.Message == "ActiveRecord") 
     { 
      //Show here User freind message 
     } 
    } 
2

他の回答とは異なり、あなたのUIからtry/catchも削除するようにアドバイスします。あなたのBLLは例外をキャッチし、それを記録し、UIが何が起こったのかを問い合わせるためのメカニズムを提供する必要があります。

これは、ビジネスレイヤーがスローする可能性のある例外をすべて列挙する必要がないので、より洗練されたUIコードになります。

if (businessObject.doSomeOperation == true) { 
    // Do whatever you need to here. 
} else { 
    // output error message from businessobject 
    // something like businessObject.LastErrorMessage(); 
} 
関連する問題