@oop_ru

Страница 554 из 785
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
throw new EmailNotSent
Еще такой был спор ка клучше писать EmailIsNotSent EmailWasNotSent

Я был за второй вариант т.к дейстиве в прошлом

а не я вообще предлогал EmailHasNotSent

da horsie
14.03.2018
17:47:53
Еще такой был спор ка клучше писать EmailIsNotSent EmailWasNotSent
Не тот случай, где надо включать граммарнаци

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

короч не все ошибки это исключения. Дальше ты лишь накладываешь на это ограничения твоего языка

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

почта ДОЛЖНА отправляться а тут херакс и не отправились

Если это не исключение то я не знаю что тогда можно считать исключительной ситуацией

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

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

Артур Евгеньевич
14.03.2018
18:18:31
ни return ни throw
Метод handle команды

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

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
Есть процедура resetPassword
Она или резетит пароль или выкидывает экспшн

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 или другой предсказуемой ситуации, используй сообщения. Исключения не инструмент для управления бизнес логикой. Они для прерывания. На то они и "исключения"

Страница 554 из 785