我正在整个异常处理丛林中挣扎,我现在正试图确定我需要多少个try / catch块,以及放置它们的位置。
我的控制器
CreateInvitation(fromUser, toUser);
调用我的BLL方法
public static Invitation CreateInvitaton(User fromUser, User toUser)
{
try
{// see if toUser exists, then create the invitation}
catch
{// throw something, maybe?}
}
我真的需要在该方法中重新抛出它吗?即使我没有重新扔它,它也不会重新回到堆叠中吗?
我是否需要将控制器的调用包装在try / catch块中,或者是多余的?
也许我根本不需要BLL方法中的try / catch块,只需要在我的控制器中使用try / catch块?
我在这里看了很多可能的组合,并且不知道正确的组合是什么。
感谢。
答案 0 :(得分:2)
在您的示例中编写的异常处理程序绝对没有做任何事情。 (好吧,它浪费了一点时间,但它没有任何用处)
原来是:
try
{...}
catch
{
// do something here.
throw;
}
然后是try / catch&扔掉将是必要的。
答案 1 :(得分:1)
在本地捕获例外,当且仅当它们表明例外行为和可以在本地修复(或评论)时。
很难找到一个例子 - 这里是一个:我有一些需要悲观锁的对象。需要锁定是因为从Web应用程序写入对象而另一个(后台)应用程序正在读取它可能会导致灾难。这确实是一个例外,因为它很少会发生。而且,我事先无能为力(因为锁可能是在下一行执行之前获得的)。但是,我可以在几个msecs中重试,因为我知道对象再次释放的机会很好。尽管如此,所有这一切都不会发生在控制器中,而是发生在服务类中。
不要对预期条件使用例外(例如,无效输入)。
此外,我同意除了记录消息(应该不在控制器中完成)和发送错误页面之外,无法处理Web应用程序中的大多数异常。最后,在捕获异常时,请确保正确执行(捕获特定的异常类型,使用throw;
而不是throw ex;
进行转发)