ASP.NET MVC2 - количество и расположение блоков try / catch (throw?) - PullRequest
1 голос
/ 15 сентября 2010

Я пробираюсь через все джунгли обработки исключений и сейчас пытаюсь определить, сколько блоков 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, или это избыточно?

Может быть, мне вообще не нужен блок try / catch в методе BLL, а нужен только блок try / catch в моем контроллере?

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Обработчик исключений, как написано в вашем примере, абсолютно ничего не делает. (ну, это тратит немного времени, но ничего не дает)

Если бы это было:

try 
{...} 
catch 
{ 
  // do something here.
   throw;
} 

Тогда понадобятся попытки / ловить и бросать.

1 голос
/ 15 сентября 2010

Ловить исключения локально, если и только если они указывают исключительное поведение и могут быть исправлены (или прокомментированы) локально.

Достаточно сложно найти пример - вот один: у меня есть несколько объектов, которым требуется пессимистическая блокировка .Блокировка необходима, поскольку запись в объект из веб-приложения во время чтения другого (фонового) приложения может привести к катастрофе.Это действительно исключение, потому что это случится очень редко.Более того, я ничего не могу с этим поделать заранее (поскольку блокировка могла быть получена непосредственно перед выполнением следующей строки).Тем не менее, я могу повторить попытку через несколько мсек, потому что я знаю, что есть хорошие шансы, что объект снова будет выпущен.Тем не менее, все это происходит не в контроллере, а в классе обслуживания.

Не используйте исключения для ожидаемых условий (например, неверный ввод).

Кроме того, я согласен с большинствомИсключения в веб-приложениях не могут быть обработаны, за исключением регистрации сообщения (которое должно быть , а не в контроллерах) и отправки страницы с ошибкой.Наконец, при перехвате исключений убедитесь, что все сделано правильно (перехватите определенный тип исключения, повторите с throw;, а не throw ex;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...