Обработка исключений в многоуровневой архитектуре - PullRequest
3 голосов
/ 24 апреля 2011

Мы занимаемся рефакторингом (и, конечно, реорганизацией) наших услуг в области многоуровневого дизайна.У нас есть уровень операций сервиса (BLL), уровень абстракции сети -> (имеет дело с сетевым прокси), уровень абстракции данных.Но мы немного озадачены нашей стратегией обработки исключений.

  1. Мы не хотим раскрывать слишком много информации из BLL во внешний мир.(из других слоев в bll все в порядке)
  2. Мы не хотим загромождать код стеками try catch
  3. Мы не хотим путать код обработки исключений (например, ведение журнала, отправка электронной почты)и т.д.) в блоках перехвата

Может ли кто-нибудь опубликовать примеры кода или литературные указатели, которые мы можем использовать для разработки нашей простой структуры обработки исключений?

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Мы не хотим раскрывать слишком много информации из BLL во внешний мир.
(из других слоев в bll это нормально)

Сам BLL определяет, что подвергается воздействию,Убедитесь, что вы показываете то, что должно быть видно.

Мы не хотим загромождать код с помощью стеков try catch

Тогда не надо.Исключения есть исключения.Не контролируйте поток, используя их.Пусть они взорвутся.

Мы не хотим путать код обработки исключений (например, ведение журнала, отправка электронной почты и т. Д.) В блоки catch

Если ваша логика не полагаетсяпри обработке исключений (чего не следует) и Ваш код защищает себя (это важно, Ваше приложение должно ВСЕГДА взорваться из-за недопустимого состояния вместо того, чтобы работать дальше. В противном случае - это сложночтобы понять, что к чему), более чем достаточно обернуть все приложение только одним обработчиком ошибок, который при необходимости сбрасывает трассировку стека.

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

Я лично использую ELMAH для своего веб-приложения- несколько строк в app.config, и у меня есть хороший журнал ошибок, хранящийся в sqlite, легко доступный из самого веб-приложения.Вот и вся обработка ошибок, которую я получил.

2 голосов
/ 24 апреля 2011
1 голос
/ 24 апреля 2011

Обработка исключений может быть настолько сложной, насколько вы хотите, но хорошим способом является использование некоторого глобального определения.Например, по аспектам, которые вы можете построить с помощью любой инфраструктуры AOP - часть большинства IoC-контейнеров, таких как Unity, Windsor Castle, Spring.NET.Отдельной категорией AOP-фреймворков является PostSharp, который добавляет аспекты во время компиляции, установленное во время выполнения.

Также вы можете проверить Enterprise Library 5.0 и ее блок приложения обработки исключений , который позволяет вам делать исключения на основе политикиобработка из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...