
Bohdan
14.03.2018
13:22:30
господа, вы откуда все?

Alan
14.03.2018
13:23:16
ебаноепхп
рассылка наверн) имею ввиду название канала ))

Артур Евгеньевич
14.03.2018
13:23:27
Я в канале запостил ссылочку

Google

Maksim
14.03.2018
13:23:43

Артур Евгеньевич
14.03.2018
13:23:44
@ebanoePhp

Bohdan
14.03.2018
13:24:13
похвалил свой чатик)
поунижал другой)

Артур Евгеньевич
14.03.2018
13:24:51
Как лучше назвать исключение? CannotSendEmail или SendEmailFailure ? Вроде как в названии исключения должно описываться что произошло, поэтому я за второй вариант

Bohdan
14.03.2018
16:34:48
я за первый - failure бывают разные

Alexandr
14.03.2018
16:37:18
причин для cannot может быть тоже вагон) ... я за второй) ... throw CannotSendEmail чо-т не звучит
если конечно более конкретизировать failure нельзя

Bohdan
14.03.2018
16:38:26
наследование ведь

Артур Евгеньевич
14.03.2018
16:39:00
просто есть метод легаси который возвращает false
мне нужно бросить 'rcgiy gj 'njve gjdjle

Google

Артур Евгеньевич
14.03.2018
16:39:13
экспшн по этому поводу

Artsiom
14.03.2018
17:00:17
Как по мне, can/cannot подходит для тестов, что бы девопс мог понять, где отвалилось из названия не заглядывая в код.

da horsie
14.03.2018
17:38:06
Но лучше конкретизировать, конечно

Denis
14.03.2018
17:39:23
Exception driven development?

Артур Евгеньевич
14.03.2018
17:46:17
Я был за второй вариант т.к дейстиве в прошлом
а не я вообще предлогал EmailHasNotSent

da horsie
14.03.2018
17:47:53

Alexandr
14.03.2018
17:48:00
Чо-т слов больше, а смысла не добавляется)) ... Всегда старался избегать лишних глаголов

da horsie
14.03.2018
17:48:13
От того, по какой причине не отправился емейл, зависит дальнейшая обработка. Может это временный сбой сети, а может адрес невалидный, а может еще что-то. Поэтому исключение должно нести информацию о причине

Артур Евгеньевич
14.03.2018
17:51:57
не на этом уровне
это метод сброса пароля - пароль сбросить не получилось - причина = не удалось отправить емайл
т.е как я вижу - в идеале мне метод отправки должен вернуть такое исключение о котором ты говоришь

da horsie
14.03.2018
17:52:58
тогда, прости, нахрена вообще это оформлено как исключение?

Артур Евгеньевич
14.03.2018
17:53:02
но у меня там херня возвращающая true/false

da horsie
14.03.2018
17:53:13
если ты ОЖИДАЕШЬ, что оно может не отправиться
какое же это исключение

Артур Евгеньевич
14.03.2018
17:54:13

Google

Артур Евгеньевич
14.03.2018
17:54:17
$this->ensureSecretIsValid($user, $command->getSecret());
$newPassword = $this->userProvider::genSecret();
$this->changePassword($user, $newPassword);
$this->sendPasswordToUserEmail($user, $newPassword, $context->getUserRequestContext());
вот кусок кода
sendPasswordToUserEmail в этом методе я пытаюсь отправить письмо и если ВДРУГ не получилось кидаю экспшн

da horsie
14.03.2018
17:57:38
и показываешь его юзеру?
я не люблю исключения, которые показываются юзеру.
по моему опыту, в таком случае чище и выразительнее получается оформить эту ситуацию как штатную, как один из возможных результатов операции

Sergey
14.03.2018
18:08:50
и все надо заворачивать в try/catch
я порой сильно одобряю решение разработчиков го "хэндлить ошибки явно"
это призывает тебя и больше думать на тему того как логику распределить (потому что если делать тупо и в лоб как люди привыкли будет неудобно)
ну и для реально исключительных ситуаций у тебя есть panic
короч не все ошибки это исключения. Дальше ты лишь накладываешь на это ограничения твоего языка

da horsie
14.03.2018
18:11:39

Артур Евгеньевич
14.03.2018
18:14:59
и показываешь его юзеру?
Ничего я не показываю. Это обработчик команды, и если он завершился исключением то шина его выбросит а я перехвачу в контроллере
почта ДОЛЖНА отправляться а тут херакс и не отправились
Если это не исключение то я не знаю что тогда можно считать исключительной ситуацией

Sergey
14.03.2018
18:16:49
она же шина
ни return ни throw

Артур Евгеньевич
14.03.2018
18:17:34
и все надо заворачивать в try/catch
Оно и завернуто. Только на уровень выше, т.к мне для выполнения программы нужно три функции выполнить последовательно. Если какая то не может выполняться то крошится с исключением. А дальше я уже в контроллере разбираюсь в чем дело если что то вдруг пошло не так. И по типу исключения я могу понять в чем беда

Google

Sergey
14.03.2018
18:17:55
по сути своей шина команд нужна там где факт выполнения команды определяется уже после того как процесс где ты что-то в шину пихал отжил свое. Асинхронное взаимодействие. Тебе неизвестен результат операции просто. А если надо что-то отобразить - ивент на фэйл и pub/sub

Артур Евгеньевич
14.03.2018
18:18:31

Sergey
14.03.2018
18:18:59
Метод handle команды
"команда" это данные (ну или юзкейс), "handle" это хэндлер команды. По сути это просто сервис, процедура

Артур Евгеньевич
14.03.2018
18:19:40

Sergey
14.03.2018
18:19:48
далее... процедура позрадумевает что она что-то может не сделать и в данной ситуации "мои полномочия все".
и вот в этой ситуации исключения оправданы.
когда у тебя есть одна хрень которую вызывает другая хрень, и эта другая хрень может плюнуть исключением и у тебя не будет после этого между этими двумя точками километрового стэктрэйса

Артур Евгеньевич
14.03.2018
18:21:16
Есть процедура resetPassword

Sergey
14.03.2018
18:21:46
ну тогда юзай себе исключения че, удобно - юзай. не удобно (а такие ситуации происходят с ростом проекта) - не юзай)

Артур Евгеньевич
14.03.2018
18:22:15

Sergey
14.03.2018
18:22:24
я например юзаю event driven подходы часто и исключения просто так там плохо. Вместо этого я в твоем resetPassword лучше доменный ивент сохраню что "не получилось"
но для тебя это может быть не актуально) ты и так пользуешься исключениями как "неявный выход из функции что бы преобразовать результат операции в респонс о том что пользователь дурачек
это не хорошо и не плохо, просто факт
прими его и будь единым с ним

Артур Евгеньевич
14.03.2018
18:25:28
Я так могу любое использование классифицировать...правда пользователь тут не совсем уместен
Т.к не обязательно он запрос инициирует

Evgeniy
14.03.2018
18:25:55
именно поэтому подход сергея лучше
он возвращает результат который ты можешь отработать
и если в случае ошикби это исключительная ситуация ты можешь там и выкинуть исключение

Google

Evgeniy
14.03.2018
18:26:47
но если это ожидаемо
то никова исключения не произойдет а в твоем случае придется ловить это исключение

Артур Евгеньевич
14.03.2018
18:31:58
Event sourcing подключать для сброса пароля?)

Denis
14.03.2018
18:52:32
Кидай исключение если ты не знаешь в чём причина (почтовый сервер недоступен например, или по таймауту отавлился), в случае некорректного email или другой предсказуемой ситуации, используй сообщения. Исключения не инструмент для управления бизнес логикой. Они для прерывания. На то они и "исключения"