2015-02-24 3 views
0

Предположим, у меня есть коллекция вложенных пользовательских исключений, которые могут быть выброшены из любого места в контроллере или службах.Какой подход лучше и почему?

Итак, какой из подходов является лучшим вариантом для принятия? 1. использовать try catch block, чтобы поймать эти исключения. 2. использовать метод, чтобы принять закрытие, которое содержит весь бизнес-модуль.

например

Подход 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

+0

Вопрос только в том, что полезно использовать try catch в начале запроса или вызвать метод обслуживания, который делает именно эту обработку для меня –

+1

, или хорошо использовать исключения вообще ... – cfrick

ответ

0

Мой Personnal предпочтения:

  • Если система может сделать что-то о Exception (вроде повторных попыток): approach1
  • Если система не может ничего, кроме отчета пользователю делать: Я использую метод обработки исключений в моем контроллере, например, Grails Goodness example
1

Вы должны рассмотреть, где и когда хотите обрабатывать исключения. Включите в try-catch, если вы можете что-то сделать с этим в этот момент (т. Е. Запишите ошибку, повторите попытку и т. Д.). Если нет ничего полезного, вы можете сделать это, чтобы оно могло пузыриться и обрабатываться на более высоком уровне. По этой причине я предпочитаю не проверять исключения из-за того, что вы можете обращаться с ними, когда захотите, и не вынуждены загромождать свой код блоками try-catch.

В этом случае я хотел бы искать исключения только в контроллере и отвечать соответствующим образом, если только я не могу что-то конкретное сделать, чтобы обработать исключение ниже.

Но это зависит от прецедента и личных предпочтений. Определенно важно подумать о том, когда может произойти исключение, и как и когда вы хотите справиться с этим, а не применять общий подход ко всем исключениям.

Смежные вопросы