2015-02-24 111 views
0

假设我有一个嵌套的自定义异常的集合,可以从控制器或服务中的任何位置抛出。哪种方法更好,为什么?

那么哪种方法是更好的选择? 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 
} 

这上面是architechture老虎钳更正确,更干净的样子。

+0

大多数哪个问题和问题取决于业务需求而不是技术可行性。这些问题的答案将根据您想要达到的目标来推动。 – kosa 2015-02-24 21:03:16

+0

问题只是在请求的起源处使用try catch还是调用一个服务方法,它只为我执行此操作 – 2015-02-24 21:30:52

+1

还是很好地使用异常...... – cfrick 2015-02-24 21:34:10

回答

0

我的personnal偏好:

  • 如果系统能为此做些什么异常(如重试):approach1
  • 如果系统不能做任何事情,但用户报告:我使用在我的控制器中的异常处理方法,像这样Grails Goodness example
1

你应该考虑你想要在何时何地处理异常。如果你可以在这一点上做一些事情(例如记录错误,重试等),那么将其放入try-catch中。如果没有任何用处,你可以做,然后允许它在更高级别上起泡和处理。我希望不要因为这个原因检查异常,因为你可以选择在你想要的时候处理它们,而不是被try-catch块强制使你的代码混乱。

在这种情况下,我倾向于仅在控制器中查找异常并作出相应响应,除非有特定的事情可以处理异常情况。

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