FloydReme
@FloydReme
Пишу музыку и программирую

Где грамотнее делать try/catch?

Здравствуйте! Ситуация:
Есть обычный CRUD, реализованный в виде многослойной архитектуры. Столкнулся с небольшим непониманием, где стоит обрабатывать разного рода ошибки (не найдена сущность в БД / неверная роль / etc.) - в BLL или же на уровне клиента.
Я пришел к мысли, что самым оптимальным вариантом будет на уровне клиента:
  • BLL по факту - прослойка между клиентов и БД. Клиент может изменяться, а если делать try/catch в сервисах, то некоторые специфические для какой-то одной платформы ошибки (например, веб), могут оказаться некорректны на другой
  • Если опираться на такое решение, то мы, грубо говоря, делегируем сервису вытащить какие-то данные. Если есть какая-то ошибка, я смогу ее отвалидировать на уровне клиента в зависимости от платформы


Скажите, пожалуйста, я прав или нет?

P.S под клиентом подразумеваются контроллеры
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
Можно использоваться оба варианта. Часто, а точнее всегда, зависит от ситуации.
К примеру, вы хотите в репозитории сделать запрос на сторонний сервис (библиотекой got или axios). Ответ может быть какой угодно, включая ошибки построения неправильного запроса. В таком случае лучше обернуть данный блок кода в try/catch.
На все контроллеры, которые так или иначе взаимодествуют с бд, можно повесить try/catch на уровне контроллера.
В своих проектах, обычно, я оборачиваю все контроллеры в try/catch и передаю ошибку в последний middleware, где есть общий обрабочтик, который в зависимости от ошибки отдаёт пользователю соответсвующий ответ

Крайне рекомендую глянуть best practice для ноды, так как там как раз часто упоминается способ обработки ошибок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы