1

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

这个事件应该包含什么?

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

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

例如,如果我在 BLL 中得到一个 NullException,那么我可以捕捉到这个......但是最好的方法是返回到 presentaiton 层并通知它这个问题......

事件?还是演示文稿中的另一个尝试/捕获?

4

2 回答 2

0

你可以做几件事;

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

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

  3. 实施足够的基础设施以不让异常发生,除非它们是系统异常。

  4. 使用 throw 异常的 throw 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

于 2009-04-28T22:58:57.593 回答
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 回答