Можно ли позволять исключению всплывать вместо того, чтобы перехватывать его в каждом методе?
Пожалуйста Не ловить исключения вкаждый метод!- вам следует только когда-либо перехватывать исключения, если вы можете сделать с ним что-то полезное, например:
- Обработать его (т.е. не перебрасывать)
- Добавить нескольковажная контекстная информация
Я поддерживал приложения, в которых каждый nethod был окружен блоком try-catch
, и я буквально имею в виду каждый метод:
public void DoSomething()
{
try
{
throw new NotImplementedException();
}
catch (Exception ex)
{
throw ExceptionHandler.CreateException(ex, "DoSomething");
}
}
Поймать исключения, подобные этому, совершенно бессмысленно и ничего не делает, кроме того, что делает ваш код труднее читать и ваши исключения труднее отслеживать.
В случае, когда ваше исключение должно проходить некоторую границу межпроцессного режима (например, в службе WCF)) затем в тот момент, когда ваше исключение становится доступным миру, который вы, возможно, захотите сначала перехватить, зарегистрировать, а затем повторно выбросить исключение в совместимом формате для границы IPC, чтобы у вас был журнал всех сбоев в вашем сервисе
Однако во многих случаях существует альтернативный механизм, разработанный именно для этой цели - WCF имеет интерфейс IErrorHandler туз, который может быть зарегистрирован для регистрации и регистрации всех необработанных исключений согласованным способом без необходимости в блоке try-catch в каждом из представленных методов.