c # Обработка исключений в 3-х уровневых приложениях win win. - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть 3-х уровневое приложение для выигрышных форм, в котором есть пользовательский интерфейс, BLL и DAL.Я ищу, чтобы добавить обработчик исключений, который выбрасывает исключения из DAL вплоть до пользовательского интерфейса, чтобы пользователь знал, что это за ошибка.Я пытался использовать try {} catch {} и выбрасывать его из DAL, но это только подбрасывает его в BLL и останавливается там.Есть ли способ вернуть его обратно в интерфейс?

Спасибо

РЕДАКТИРОВАТЬ:

КОД:

http://pastebin.com/V75MDWdm

Ответы [ 2 ]

7 голосов
/ 25 февраля 2011

Каждый слой должен обернуть исключение в чуть более абстрактное исключение.

Например, возьмем простую операцию входа клиента:

  • DAL генерирует исключение "RecordNotFound" при попытке загрузить запись "клиента".
  • BLL перехватывает его и помещает в исключение InvalidLogonRequest, говоря, что запись клиента не найдена.
  • Графический интерфейс перехватывает это и отображает сообщение об ошибке для пользователя, говоря, что «клиент» не существует.

Каждый уровень под пользовательским интерфейсом не обязательно знает более широкий контекст выполняемой операции, поэтому уровень выше предоставляет дополнительную контекстную информацию о том, что пошло не так ...

Возможно, лучшим примером будет операция регистрации клиента:

  • DAL генерирует sql «UniqueConstraintException» в столбце адреса электронной почты.
    • Возможно, DAL не знает, что это процесс регистрации, он только знает, что делает ВСТАВКУ в таблицу клиентов ...
  • BLL ловит это и генерирует исключение «EmailAlreadyExists».
  • GUI ловит это и выводит пользователю сообщение «адрес электронной почты уже занят»
2 голосов
/ 25 февраля 2011

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

Я бы определил некоторые пользовательские исключения для этой конкретной ошибки и специально перехватывал / перебрасывал эти исключения. использование базового класса Exception приведет только к путанице между разными уловами в разных местах.

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