Получи случайную криптовалюту за регистрацию!

Конспект по теме 'Исключения' из категории 'C#' Часть II - рек | .NET backend study

Конспект по теме "Исключения" из категории "C#"
Часть II - рекомендации по использованию

⦁ Использовать правильный проброс исключений
Лучше писать вот таким образом

try {}
catch(Exception ex) { throw; }

Вместо написания:

try {}
catch(Exception ex) { throw ex;}

В первом случае будет полностью сохранён стек-трейс исключения. Дополнительную информацию можно добавлять в объект ex.

⦁ Сначала нужно перехватывать наиболее специфичные исключения. Перехват общего Exception можно сделать самым последним. При обработке исключений можно попасть только в один catch-блок, а не последовательно во все перечисленные.
Как пример, во всех специфичных обработчиках можно выводить конкретные сообщения пользователю, а в обработке общего исключения создавать тикет в службе поддержки, т.к. столкнулись с неожиданным исключением;

⦁ Для специфичных ситуаций нужно реализовывать собственные исключения - это поможет при чтении кода и логов. Также будет легче изучать стек-трейс;

⦁ Нельзя проглатывать исключения. При возникновении любого исключения - его нужно либо логировать, либо корректно пробрасывать его дальше. Нельзя оставлять пустым блок catch;

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

⦁ Нужно логировать весь объект исключения целиком, а не только одно сообщение из исключения. Это даст намного более полную информацию при чтении логов;

⦁ Существует 2 способа работы с ошибками:
- сразу бросать исключение при некорректном поведении (fail fast принцип) - как только происходит ошибочная ситуация - выбрасывать исключение. Плюсом данного подхода является простота и отсутствие обвязок. Не создается никаких лишних абстракций, в случае ошибки сразу выбрасывается исключение. В таких системах создается единая точка обработки исключений, которые перехватывают возникающие исключения и преобразовывают их в корректный вид. Минусом может быть сложность переиспользования отдельных компонентов в другой системе, где единой точки перехвата исключений нет и работа идет с помощью различных оберток;

- использовать обертки для методов, которые потенциально могут сгенерировать исключения.
Пример такой обертки - библиотека OperationResult .
В методе, который потенциально может выбросить исключение, возвращаемый тип указывается как OperationResult и опасный участок кода оборачивается в try-catch блок. В случае успешного выполнения метода возвращается OperationResult.Success , в случае некорректного - OperationResult.Fail . Плюсом данного способа является переиспользуемость - данный код полностью автономен и его можно использовать в любых системах. Он гарантирует, что любые возникающие исключения будут корректно обработаны, залогированы и код продолжит свое выполнение. Минусом является громоздкость данного способа засчет использования абстракций.


Вернуться в бэклог категории C#