Мы не хотим раскрывать слишком много информации из BLL во внешний мир.
(из других слоев в bll это нормально)
Сам BLL определяет, что подвергается воздействию,Убедитесь, что вы показываете то, что должно быть видно.
Мы не хотим загромождать код с помощью стеков try catch
Тогда не надо.Исключения есть исключения.Не контролируйте поток, используя их.Пусть они взорвутся.
Мы не хотим путать код обработки исключений (например, ведение журнала, отправка электронной почты и т. Д.) В блоки catch
Если ваша логика не полагаетсяпри обработке исключений (чего не следует) и Ваш код защищает себя (это важно, Ваше приложение должно ВСЕГДА взорваться из-за недопустимого состояния вместо того, чтобы работать дальше. В противном случае - это сложночтобы понять, что к чему), более чем достаточно обернуть все приложение только одним обработчиком ошибок, который при необходимости сбрасывает трассировку стека.
Например, в .net, вы можете использовать для этого подписку на необработанное исключение appdomain, событие .
Я лично использую ELMAH для своего веб-приложения- несколько строк в app.config, и у меня есть хороший журнал ошибок, хранящийся в sqlite, легко доступный из самого веб-приложения.Вот и вся обработка ошибок, которую я получил.