在BLL中处理异常并返回到客户端(winforms或webforms)?

时间:2009-04-28 22:50:31

标签: winforms exception exception-handling try-catch

我正在寻找进行异常处理的最佳方法,例如..当业务逻辑层出现错误时,是使用catch来停止METHOD并将EVENT返回到表示层的最佳方法吗? / p>

此活动应包含哪些内容?

或者我应该总是在表示层中填充异常并处理它们吗?

任何人都有一些很好的链接,并且需要阅读有关处理异常的最佳方法以及如何在客户端处理它们的方法......

例如,如果我在BLL中得到NullException而不是我能抓住这个...但是最好的方法是什么,然后返回到presentaiton层并告知它问题..

事件?或演示文稿中的其他尝试/ Catch?

2 个答案:

答案 0 :(得分:0)

你可以做几件事;

  1. 专注于在意外错误出现时改善用户体验。

  2. 始终在事件日志或数据库中记录错误。

  3. 实施足够的基础设施,除非是系统例外,否则不会发生异常。

  4. 使用throw instread of throw exception

  5. 一些帮助您的链接

    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

答案 1 :(得分: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);
  }
  ...
}