は通常、あなたは、単に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の場合)サーバーログまたはカスタムオプションのみがあります。私が推薦する
唯一のものは、それぞれの層が独自の活動を記録し、ログが分離されていることであるあなただけの内部例外を使用することはできません
出典
2011-07-19 09:02:30
War
(例えばUI関連のエラーは本当にBLLログに属するものではありません)層のシフトを示していますか? – faester