170 похожих чатов

Доброе утро, правильно я понимаю, что UseExceptionHandler - это обработчик всех

необработанных исключений? И каждый метод действия контрролера должен всё-равно отслеживать все возможные исключения у себя, что бы вернуть пользователю корректное описание ошибки

17 ответов

15 просмотров

Если контроллер отправляет данные в какой-нибудь сервис, то уже он должен обработать ошибку. Просто контроллер должен вернуть ошибку, а обрабатываться она должна в месте возникновения.

да, правильно понимаешь

Константин- Автор вопроса
Azizjan Reflection
Если контроллер отправляет данные в какой-нибудь с...

если контроллер вызывает UserService, который вызывает UserRepository в методе которого происходит ошибка, контроллер же эту ошибку должен обработать, а не репозиторий

Константин- Автор вопроса
Дмитрий Калинов
да, правильно понимаешь

и в каждом методе действия контроллера будет что-то типа try { .... return View(model); } catch { return new View("Error", "Описание ошибки"); }

UseExceptionHandler используется в случае совсем-совсем unexpected исключения, когда где-то в более глубоких слоях произошло неожиданное исключение как пример - ты внутри своего кода дёргаешь какое-то публичное API, и вдруг внезапно в один прекрасный день его разработчики изменяют контракт => твой код падает вот для примерно таких случаев и ставят заглушку UseExceptionHandler

Константин
и в каждом методе действия контроллера будет что-т...

я бы сделал это как-то так (код привожу примерный): Result<MyCoolModel> result = await _mediator.HandleAsync(request); if (result.Succeeded) { return View(result.Model); } else { ModelState.AddModelError(string.Empty, result.ErrorMessage); return View(); }

Константин- Автор вопроса
Дмитрий Калинов
я бы сделал это как-то так (код привожу примерный)...

а зачем тут нужен медиатор? он только агрегирует все необходимые для обработки запроса сервисы? Зачем переносить логику обработки запроса в другое место?

Константин
а зачем тут нужен медиатор? он только агрегирует в...

медиатор на основе типа запроса выбирает соответствующий хэндлер, в который через Dependency Injection внедряются все сервисы, необходимые для обработки запроса плюсы: - код каждого отдельного хэндлера проще, чем код сервиса, где всё собрано в кучу - каждый хэндлер можно тестировать отдельно - у каждого хэндлера свои зависимости, в процессе обработки запроса инстанцируются только компоненты, необходимые для обработки конкретного запроса минусы: - кода становится больше, нужно уметь его логично организовать в понятную структуру

Константин
а зачем тут нужен медиатор? он только агрегирует в...

затем, что в идеале код экшена контроллера должен быть простым как валенок, в стиле "получил модельку из тела запроса, передал её дальше на обработку, сижу результат жду"

Константин- Автор вопроса
Дмитрий Калинов
медиатор на основе типа запроса выбирает соответст...

очень похоже на описание контррллера, asp core на основе запроса строит маршрут, выбирает соответствующий контроллер для обраьботки запроса, ищет метод и через DI внедряет необходимые сервисы для обработки запроса

Дмитрий Калинов
медиатор на основе типа запроса выбирает соответст...

А если просто: перекладывает все DI из одной большой кучи(контроллер) по маленьким (хэндлеры) К минусам ещё можно добавить затрудненную навигацию/отладку.

Константин- Автор вопроса
Дмитрий Калинов
и код контроллера неумолимо раздувается

так если этот раздутый код просто переложить в мкдиатор, меньше же кода не станет

Константин
так если этот раздутый код просто переложить в мкд...

Молодец. Но читать и понимать становится легче

Ivan Kukushkin
А если просто: перекладывает все DI из одной больш...

можно зато на каждый хэндлер тесты накидать, хоть модульные хоть интеграционные замокал сервисы, которые нужны хэндлеру, передал их в конструктор => профит

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта