2011-07-18 19 views
0

エンタープライズライブラリ4.0の例外処理ブロックで私の手を試してみてください。私のアプリケーションは、DAL、BLLとUIを持っているasp.netアプリケーションです。asp.netの例外処理

例外が発生した場合、DAL(sp、params、exception)、BLL(user、roleなど)およびUI(セッションの内容)に含まれるシナリオ/コンテキストを記録します。今私は辞書でカスタム例外を作成する必要があると思います。例外がDALで発生すると、例外が泡立ち、すべてのレイヤーで関連するデータを辞書に取り込みます。最後に、私はApp_Errorでログに記録します。

ウェブ上の例では、DAL自体でログに記録してプロポゲートすることを推奨しています。 BLLのUIレイヤーのような例外的な例外に対しては何をしますか?コンテキストを保存するのと同じですが、すべてのレイヤーは関連するデータを記録します。そして、ログでは、各層のログ文を相関させてコンテキストを作成する必要があります。

示唆してください...私はこのような性質の常識で実装されたすべてのソリューションで

+2

(例えばUI関連のエラーは本当にBLLログに属するものではありません)層のシフトを示していますか? – faester

答えて

1

は通常、あなたは、単にDALからエラーを報告することを指示します。

dbをトランザクションで実行すると、ロールバックが実行され、内部例外が発生し、結果として変更が行われなかったことを示す実際の例外が自分自身でラップされます。

BLLでは例外が捕捉され、さらに呼び出し元アプリケーションのカスタム "BusinessProcessException"としてスローされます。オプションで、BLLは独自の「ボックス」内にあるため、時にはビジネスプロセスに関連する例外を記録するための独自のロギングメカニズムを備えています。

天気予報がBLL層に記録されているかどうかを調べるには、UI層(クライアントアプリケーション)に例外が発生し、完全な例外ツリーを戻してログに記録する必要があることを通知する必要があります。

UIレイヤーのクライアントアプリケーションコードには独自のログが含まれていても、BLLが使用するログにはなりません。

イベントサイクルはこのようなものです...

のAppは、BLL方法 BLL方法は、DB上の(例えば)投げ ストアドプロシージャのエラーをPROCを保存DAL方法 DALメソッド呼び出しを呼び出して呼び出して、SQL例外 DALはスロー内部のsqlexceptionを持つ新しいdal例外 bll dal例外を処理してdalをログに記録しない bllメソッドへのトランザクション要素があると、bllは他の呼び出しをロールバックします。 bllは新しいbllフレームワークの例外をスローします。innerはdal例外です。 アプリケーションはbll例外を処理し、完全な例外ツリーからユーザーエクスペリエンスを進めるために何をすべきかを決定します。

これは、ほとんどすべての.netが動作する方法です。

物事は注意する:私は更新の呼び出しに失敗したビジネス・オブジェクトを持っている場合は、そのビジネス・オブジェクトは、その呼び出しの一部として更新されているいくつかの子オブジェクトを有することができる

。 これらの子オブジェクトは異なるサーバー上の複数のdalエンドポイントから組み立てることができ、各dalエンドポイントは潜在的に複数のdbの複数のレコードを更新する必要があります

blalロジックのトランザクションがあり、格納された各proc呼び出し内で1になる可能性があります。

バックグラウンドでは、bllレベルのトランザクションが失敗し、ロールバックが呼び出されると、すべての子トランザクションをロールバックする必要があります。ネットワークはこれが不可能かもしれません。

したがって、あなたが取るアクションは失敗する可能性があり、階層のいずれかの部分が失敗し、呼び出しを行うコードがこれに責任を負う場合、ロールバックすることができます。

これは最終的に何が起こったのかの完全な監査証跡が必要なことを意味します。 bll devとして私のフレームワークはとにかく、SQLも多くのdalの実装はこの点で簡素化されているトランザクションログを持っているすべてのログを記録します。

アプリケーションには(asp.netの場合)サーバーログまたはカスタムオプションのみがあります。私が推薦する

唯一のものは、それぞれの層が独自の活動を記録し、ログが分離されていることであるあなただけの内部例外を使用することはできません

+0

+1私は伝統的にDALのログを別途設定していませんが、通常はBLLによって駆動されているだけなので、ここで良いアドバイスをしてください。 – akmad

+0

Yeh私はSQLの独自のトランザクションログに頼る傾向があることに同意します...しかし、SQLバックエンドを使用しておらず、実行されたアクションの監査証跡が必要な場合、bllログは必ずしも明確な画像を表示しませんデザインとスケール)...私はすべての基盤をカバーするのが好きです。あなたは問題が発生したときにあなたが得ることができるすべてのデータに感謝します!!!! – War