Общее правило заключается в том, что вы можете поймать исключение, только если действительно можете что-то с этим сделать. Таким образом, на уровне Business или Data вы могли бы поймать исключение только в такой ситуации:
try
{
this.Persist(trans);
}
catch(Exception ex)
{
trans.Rollback();
throw ex;
}
Мой бизнес / Уровень данных пытается сохранить данные - если генерируется исключение, все транзакции откатываются и исключение отправляется на уровень пользовательского интерфейса.
На уровне пользовательского интерфейса вы можете реализовать общий обработчик исключений:
Application.ThreadException + = новый ThreadExceptionEventHandler (Application_ThreadException);
Который затем обрабатывает все исключения. Может регистрировать исключение и затем отображать удобный для пользователя ответ:
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
LogException(e.Exception);
}
static void LogException(Exception ex)
{
YYYExceptionHandling.HandleException(ex,
YYYExceptionHandling.ExceptionPolicyType.YYY_Policy,
YYYExceptionHandling.ExceptionPriority.Medium,
"An error has occurred, please contact Administrator");
}
В реальном коде пользовательского интерфейса вы можете поймать отдельные исключения, если собираетесь сделать что-то другое - например, отобразить другое дружеское сообщение или изменить экран и т. Д.
Кроме того, в качестве напоминания всегда старайтесь обрабатывать ошибки - например, делите на 0 - вместо того, чтобы выдавать исключение.