Большим преимуществом исключений является то, что вы можете иметь дело с проблемами, когда вы можете что-то с ними сделать, а не непосредственно в функции, например, например. Обнаружен отсутствующий файл или в вызывающей функции, или в вызывающей стороне, & c.
Однако, исключения также имеют для обработки где-то вдоль цепочки. Место возникновения этих точек зависит от используемой вами структуры и от того, из чего состоит ее управление исключениями. Ключевой вопрос заключается в следующем: каковы ваши точки входа , в которых разрешение исключения из-под контроля может привести к отрицательным последствиям? Типичные примеры включают
- Код обработки событий в интерактивных приложениях с пользовательским интерфейсом (который, по крайней мере, в WinForms и ASP.NET можно массово перехватить, предоставив обработчики событий исключений ).
- Точки интеграции, в которых вы отвечаете на внешние сообщения (например, получение сообщений из очереди, обработка файла, прослушивание именованного канала, реализация службы WCF ).
- Таймер событий, где вы выполняете фоновую обработку.
- Методы запуска потока.
Иногда вам также нужно поймать общую техническую ошибку низкого уровня и перевести ее в более специфичное для домена исключение. Обычно это делается в хорошо спроектированных библиотеках, чтобы защитить пользователей от внутренних деталей реализации. В корпоративном приложении вам может потребоваться перехватить определенные исключения SqlException и повторно выбросить их как исключения для конкретного приложения (например, YourApp.UnknownCustomer), чтобы иметь дело с ними на более высоких уровнях логики.
Мой совет: решайте проблемы на самом высоком возможном уровне, но убедитесь, что у ловушек исключений есть разумные исключения для работы. И, кстати, если вы не ненавидите своих пользователей, не отображайте исключение и его трассировку стека! ; -)