2012-03-06 48 views
4

我正在开发一个应用程序的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层以外的代码的选项,我希望经常遇到此特定异常。

在此先感谢!

+0

您不能更改底层吗? – 2012-03-06 22:21:58

+0

我只能请求其他人改变它。 – Khan 2012-03-06 22:23:00

+0

我希望我可以接受倍数作为答案,但我想我必须为我的情况提供最大的价值。 – Khan 2012-03-06 22:29:49

回答

2

这是一个有点主观,但我宁愿生活在我的代码中处理catch (Exception)的丑陋,而不是担心如果有人将错误消息更改为No Data Returned以外的东西会发生什么。

+0

!!!!我没有想到这一点。超值。谢谢! – Khan 2012-03-06 22:24:28

2

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

底线是,它确实取决于问题的性质和严重性以及您的客户对UI的期望。

+0

我明白你的观点,但就我而言,用户对应用程序没有太多的控制。比数据输入/请求更多的点击导航。非常好的答案。 – Khan 2012-03-06 22:28:21

2

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

1

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

尤其是在用户界面层,答案很大程度上取决于应用程序的可用性,以及您有哪些框架/系统来处理错误。

通常,远传播这种错误将分为两大类:

,用户应该知道的
  • 问题,和/或显著影响可用性。这些通常是在决定下一步采取什么操作(例如,如果在登录时未找到用户名,或者您尝试显示的数据不可用)之前需要用户输入的问题。与其抛弃新的例外情况,通常情况下,您可能会根据系统情况报告错误。

  • 用户不应该意识到的问题,这些问题与系统的正常运作无关,或仅与系统管理员等有关......这些类型的问题通常可以通过重新抛出例外情况,因为通常情况下,您将拥有一个顶层图层,用于在sysadmins/etc的某个位置记录异常。要记录

相关问题