2009-04-28 5 views
1

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

このイベントにはどのようなものが含まれますか?

私はいつも例外をバブルしてプレゼンテーション層で扱うべきですか?

誰でもいくつかの良いリンクを持っていると私は私よりもBLLでNullExceptionを取得する場合たとえば

...例外処理の最良の方法に関しては、この上で読んで、どのようにクライアントにそれらを処理するために必要なこれを捕まえることができますが、何が最善の方法で、現在のレイヤーに戻り、問題を通知します。

イベント?またはプレゼンテーションの別の試して/キャッチ?

答えて

0

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

  1. 予期しないエラーがそれ自身を示すとき、ユーザーエクスペリエンスを向上させることに焦点を当てています。

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

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

  4. スロー例外の使用スローinstread

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

  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

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); 
    } 
    ... 
} 
+0

こんにちは感謝を。 。 うん、とってもいい!私はあなたがコールバックieと言うとき、number3に関するより多くの情報を聞くために見るでしょう。 EVENT no?サンプルコードはありますか? –

+0

私は私の答えに例を追加しました。 – nightcoder

関連する問題