1

例外処理を行う最善の方法を探しています。たとえば、ビジネス ロジック レイヤーでエラーが発生した場合、キャッチを使用して METHOD を停止し、プレゼンテーション レイヤーに EVENT を返すのが最善の方法ですか?

このイベントには何を含める必要がありますか?

または、常に例外をバブルアップして、プレゼンテーション層で処理する必要がありますか?

例外を処理する最良の方法とクライアントでそれらを処理する方法に関して、誰もがいくつかの良いリンクを持っており、これを読む必要があります...

たとえば、BLL で NullException を取得した場合、これをキャッチできます..しかし、最善の方法は何ですか?プレゼンテーション層に戻り、問題を通知します..

イベント?またはもう一度試してください / プレゼンテーションでキャッチしますか?

4

2 に答える 2

0

それにはいくつかの方法があります。

1) 内部にメッセージを記述して例外をスローする。

2) 発射イベント

3) ユーザーと対話するための特別なインターフェースの使用。
たとえば、IUiCallbacks インターフェイスのようなものを実装し、このインターフェイスを実装するオブジェクトを BLL クラスまたはメソッドに送信できます。後で、BLL のメソッドは IUiCallbacks.SendMessage() または IUiCallbacks.SendError() を呼び出してプレゼンテーションを通知できます。また、WinFormsUiCallbacks、WebFormsUiCallbacks、SilentUiCallbacks などのさまざまなクラスを使用して、このインターフェイスを実装できます。

私は通常、1)と3)を使用します

3) の例:

public interface IUiCallbacks
{
  void SendMessage(string message);
  void SendException(string message, Exception ex);
}

public class WinFormsUiCallbacks : IUiCallbacks
{
  public void SendMessage(string message)
  {
    MessageBox.Show(message);
  }

  public void SendException(string message, Exception ex)
  {
    MessageBox.Show(string.Format("Unfortunately, the following errror has occurred:{0}{1}", Environment.NewLine, ex.Message));
  }
}

public class OrderService
{
  private IUiCallbacks _iUiCallbacks;
  ...
  public OrderService() { ... }
  public OrderService(IUiCallbacks iUiCallbacks)
  {
    _iUiCallbacks = iUiCallbacks;
  }
  ...
  public void AddOrder(Order order)
  {
    ...
    if(OrderAlreadyExists(order))
    {
      if(_iUiCallbacks != null)
        _iUiCallbacks.SendMessage("The order can not be added, because it is already accepted.");
      return;
    }
    ...
  }
  ...
}

したがって、次のように使用できます。

public partial class OrderForm : Form
{
  ...
  public void btnAddOrderFromExcel_Click(...)
  {
    Order order = LoadOrderFromExcel(...);
    OrderService orderService = new OrderService(new WinFormsUiCallbacks());
    orderService.AddOrder(order);
  }
  ...
}
于 2009-04-28T23:02:41.140 に答える
0

いくつかのことができます。

  1. 予期しないエラーが発生した場合は、ユーザー エクスペリエンスの改善に重点を置いてください。

  2. イベントログまたはデータベースに常にエラーを記録します。

  3. システム例外でない限り、例外が発生しないように十分なインフラストラクチャを実装します。

  4. スロー例外のスローインストレッドを使用する

あなたを助けるためのいくつかのリンク

  1. http://today.java.net/pub/a/today/2003/12/04/exceptions.html

  2. http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

  3. http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx

于 2009-04-28T22:58:57.593 に答える