在这种情况下,我应该抓住并重新抛出异常吗?

时间:2012-03-06 22:18:27

标签: .net exception

我正在开发应用程序的UI层,并在发出请求后在业务层(或更低层)中抛出异常。例外情况如下所示

“System.Exception:没有数据返回......”

显然有人做了一件简单的事情:

if (...Rows.Count < 1)
    throw new Exception("No Data Returned");

现在在我的游戏领域,我是否应该尝试将其重新抛出作为自定义异常来清理它,我可以专门处理:

try
{
    var myBusinessObject = MyBusinessMethod();
}
catch (Exception ex)
{
    if (ex.Message == "No Data Returned")
    {
        throw new NoDataException(ex.Message);
    }
    else
    {
        throw;
    }
}

还是有一种更优雅的方式来处理这些。

注意,我没有选择在UI层之外更改代码,我确实经常遇到这个特殊的异常。

提前致谢!

4 个答案:

答案 0 :(得分:2)

我真的认为这取决于您的通话环境中该异常的含义。例如,如果您要求按名称或ID加载客户,则可能只会通过“未找到客户”对话框向您的用户报告该例外情况。另一方面,如果你试图加载一些关键的东西,你认为应该在那里并且你得到了那个例外,你必须做一些不同的事情。

最重要的是,它实际上取决于问题的性质和严重程度以及客户对UI的期望。

答案 1 :(得分:2)

这有点主观,但我宁愿忍受在我的代码中处理catch (Exception)的丑陋而不是担心如果有人将错误消息更改为No Data Returned之外的其他内容会发生什么。< / p>

答案 2 :(得分:2)

如果您无法管理或更改较低级别的代码,则您只能通知用户并邀请他重试该操作或采取其他操作。 您不必向用户显示异常消息(如果不需要)。相反,如果可能的话,使用有关被调用方法和传递参数的信息向业务层发送消息可能很有用。

答案 3 :(得分:1)

答案非常具体,取决于您的要求和应用程序的可用性。

特别是在UI层,答案很大程度上取决于什么会使应用程序更有用,以及你有什么框架/系统来处理错误。

通常,传播到目前为止的错误将分为两大类:

  • 用户应了解的问题,和/或哪些因素会对可用性产生重大影响。这些通常是您在决定接下来要采取的操作之前需要用户输入的问题(即,如果在登录时未找到用户名,或者您尝试显示的数据不可用)。不是抛出新的异常,而是通常您可能会报告适合您系统的错误。

  • 用户不应该注意的问题,这些问题与系统的正常运行无关,或者只与系统管理员等有关......这些类型的问题通常可以通过重新抛出来更好地处理例外情况,因为通常你会有一个顶级层,在一个地方为sysadmins / etc ..记录例外记录