Обработка исключений в многоуровневом приложении - PullRequest
8 голосов
/ 17 декабря 2010

Если у меня есть многоуровневое приложение, и мой уровень данных может столкнуться с OptimisticConcurrencyException как должен справляться вызывающий уровень или действительно нижний уровень с этим ??

Вызывающий уровень понятия не имеетЧто такое OptimisticConcurrencyException , так что я должен реализовать пользовательское исключение и перехватить OptimisticConcurrencyException и выдать свое пользовательское исключение?

Некоторые рекомендации по этому поводу будут с благодарностью

Ответы [ 2 ]

7 голосов
/ 17 декабря 2010

OptimisticConcurrencyException является исключением, которое относится к слою данных и поэтому должно содержаться в нем. Маловероятно, что вызывающий слой справится с этим.

Я бы создал более общее исключение, такое как DataSourceException, которое содержало бы некоторый контекст, например, какая функция не сработала (и с какими параметрами) и почему. Я бы также включил исходное исключение в качестве внутреннего исключения.

Прочитайте запись в моем блоге о ловле исключений: http://blog.gauffin.org/2010/11/do-not-catch-that-exception/

Я также написал несколько других записей об обработке исключений, нажмите на тег Exception.

Обновление

Я бы создал следующие проекты:

  • Project.Web <--- использует сервис через интерфейсы спецификации. </em>
  • Project.Service <- реализует все в Спецификации </em>
  • Project.Service.Specification <--- Размещать здесь исключения (классы) и интерфейсы, определяющие ваши службы (или репозитории, если вы не используете какие-либо службы). </em>
4 голосов
/ 17 декабря 2010

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

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

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