1

たとえば、プレゼンテーション、ビジネス、およびデータ レイヤーを含むマルチレイヤーの Winform アプリがあり、ビジネス レイヤーまたはデータ レイヤーでエラーが発生した場合、唯一の論理的なアクションはエラーをログに記録し、ユーザーにそのことを通知することです。エラーが発生しました。ロギングはどこで行われるべきですか?

ビジネスレイヤーとデータレイヤーのメソッドをtry catchブロックに入れる必要があります

try
{
    DoSomethingThatMightGiveErrors();
}
catch(Exception ex)
{
    logger.log(ex.ToString());
    throw;
}

または、エラーをプレゼンテーション レイヤーまでバブルアップさせて、そこでログ記録とユーザーへの通知を処理する必要がありますか?

4

4 に答える 4

3

ビジネス層レベルでログを記録してから、エラーを再スローします。将来、このレイヤーが別のプロジェクトで使用される場合、既にロギングを行っています。例外を再スローすると、このレイヤーのコンシューマーはエラーを分かりやすいメッセージに変換できます。

編集: ログの種類に少し依存すると思います: UI から独立した中央データベースにログを記録している場合は、ログをビジネス ロジック レイヤーに配置します。アプリケーションのディレクトリにログ ファイルを書き込むなど、ログが UI に固有のものである場合は、それを UI に配置します。

于 2009-12-21T14:51:22.510 に答える
2

未処理の (ビジネスに関係のない) 例外について話している場合は、ユーザーをキャッチ/ログ/通知できる UI レイヤーに伝播させます。

于 2009-12-21T14:50:27.623 に答える
1

私の好みは、それをビジネスレイヤーに配置することです。

  1. プレゼンテーション層の性質を変更した場合(つまり、winformsからwebformsに変更した場合)、ロギングコードを複製する必要はありません。
  2. ビジネスクラスのメソッドのリストをいつでもスキャンして、ロギングのためにそれらを検査/微調整できるため、すべてのロギングを見つけて維持するのがはるかに簡単になります。ロギングをプレゼンテーション層に配置すると、ロギング呼び出しはいたるところに分散します。1つのビジネスクラスで、さまざまなプレゼンテーションクラスでロギング呼び出しを行うことができます。
于 2009-12-21T14:53:29.837 に答える
0

それは要件によって異なります。たとえば、プレゼンテーション層へのバブリングによってエラーが表示された結果として、ユーザーをアプリケーションから遠ざけたいですか? これらのエラーは、予期しない状況でどのくらいの頻度で発生しますか?

これはよくある質問であり、すべてのアプリケーションは異なります。私が言える最も基本的なことは、ビジネス/データ層で try catch 句を使用し、エラーが予想される特定の状況をユーザーに確実に通知することです (これはドキュメントにありますか?)

それ以外は、エンドユーザーからの要件やフィードバックを確認してください...プレゼンテーション層にエラーが表示されることを許可すると、最悪の場合、エラーが噴出された結果、ユーザーはそれを使用することを拒否します...

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2009-12-21T14:49:50.813 に答える