Страницы

Поиск по вопросам

вторник, 12 февраля 2019 г.

Где обрабатывать исключения в приложении asp.net mvc?

Где необходимо отлавливать исключения в приложении asp.net mvc? Например у меня есть функция в сервисе, которая использует базу данных:
public async Task GetAcount(string id) { return await _applicationUserRepository.GetOrDefaultAsync(id); }
Если будет ошибка подключения к базе данных будет исключение. Его можно обработать обойти в репозитории, например так:
public async Task GetOrDefaultAsync(string key) { TEntity result = null;
try { return await _entities.FirstOrDefaultAsync(e => e.Id == key); } catch { }
return result; }
Или в сервисе, например так:
public async Task GetAcount(string id) { ApplicationUser result = null; try { result = await _applicationUserRepository.GetOrDefaultAsync(id); } catch { }
return result; }
Или в контроллере, например так:
public async Task Details(string id) { if (id == null) { return NotFound(); } ApplicationUser applicationUser = null; try { applicationUser = await _usersService.GetAcount(id); } catch { return RedirectToAction("Error"); } if(applicationUser == null) { return NotFound(); }
return View(applicationUser); }
Можно вообще не отлавливать исключение, тогда при ошибке пользователь увидит это:
Где и как нужно обрабатывать исключения при работе с базой данных и нужно ли вообще их обрабатывать?


Ответ

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

Комментариев нет:

Отправить комментарий