哪种方法更好,为什么?

时间:2015-02-24 21:00:54

标签: java grails closures

假设我有一组嵌套的自定义异常,可以从控制器或服务中的任何位置抛出。

那么采用哪种方法是更好的选择呢? 1.使用try catch块来捕获这些异常 2.使用方法接受包含所有业务模块的闭包。

e.g

方法1:

 try{
      //call the business logic here
    }catch(CustomException ex){
      // do something
    }

方法2。

Controller.action{
   // call the business logic here.
}
This method will in turn catch all the exceptions in a try catch
like, this action may look like the following

action(Closure closure){
   try{
}
catch(CustomException e)
  // do handling
}

以上哪一项是建筑风格更加正确,看起来更干净。

2 个答案:

答案 0 :(得分:1)

您应该考虑处理异常的位置和时间。如果你可以在那个时候做一些事情,请附上一个try-catch(即记录错误,重试等)。如果没有任何有用的东西你可以做,然后让它冒泡并处理更高的水平。由于这个原因,我更喜欢未选中检查异常,因为您可以选择在需要时处理它们,并且不会强制使用try-catch块来混淆代码。

在这种情况下,我倾向于仅在控制器中查找异常并相应地做出相应的响应,除非我能做些具体的事情来处理更低的异常。

但它确实取决于用例和个人偏好。考虑何时可能发生异常以及如何以及何时处理异常而不是对所有异常采用一揽子方法,这一点非常重要。

答案 1 :(得分:0)

我的个人偏好:

  • 如果系统可以对异常做一些事情(比如重试):approach1
  • 如果系统无法做任何事情,只能向用户报告:我在我的控制器中使用了异常处理方法,例如Grails Goodness example