Обработка исключений в сущности, MVC с шаблоном репозитой - PullRequest
3 голосов
/ 09 июля 2011

Я использую платформу сущностей для моего проекта с MVC в качестве внешнего интерфейса.И я реализовал модуль работы шаблона с шаблоном хранилища.У меня есть сервисный слой поверх хранилищ для управления бизнесом.У меня вопрос, где обрабатывать исключения.Это хорошая идея, чтобы пропустить все исключения на уровне представления и обработать его в контроллере, или мне нужно обработать его нижние слои?

Ответы [ 2 ]

3 голосов
/ 09 июля 2011

Что ж, общая идея состоит в том, чтобы пользовательский интерфейс не обрабатывал все исключения, и в этом нет особого смысла.Допустим, у вас есть слой данных, реализованный с помощью ADO.NET.Общий шаблон здесь заключается в обработке SqlException на уровне данных, а затем оборачивании SqlException в более значимое DatabaseLayerException, которое должны обрабатывать верхние уровни - и вы следуете этому шаблону вплоть до самого верха, чтобы вы могли иметь что-то вроде InfrastructureException, ApplicationException и т. Д...

В самом верху вы перехватываете все исключения ApplicationException, которые остались необработанными (и заставляете все ваши исключения наследовать это исключение для полиморфизма), и вы перехватываете все необработанные исключения как особый случай, который вряд ли произойдет,и попробуйте восстановить его.

Я также предлагаю использовать ведение журнала вручную или с помощью AOP - вы найдете много ресурсов в Интернете (возможно, Log4Net?).

1 голос
/ 09 июля 2011

Я думаю, что в любой стратегии исключений у вас есть следующие варианты:

  • для восстановления из исключения, если это возможно (например, сервер не работает, подождите немного и попробуйте снова)
  • Игнорировать исключение, потому что оно недостаточно серьезное или по каким-либо другим причинам.
  • Пузырьок вверх. Здесь существует несколько стратегий, например, throw; или throw new Exception("message", InnerException);, чтобы назвать несколько.

Наконец, есть глобальные опции для регистрации исключения в каком-либо формате журнала или для отправки электронного письма и т. Д. Я не включаю это в три вышеупомянутых варианта, потому что это глобально для всех трех вышеупомянутых вариантов.

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

...