Size: a a a

2020 November 23

SP

Sergey Protko in PHP
sergalius
Помогите пожалуйста разобраться с событиями.
Есть заказ. Заказ может переходить в разные состояния. Например заказ перешёл в процессинг, создалось событие. Далее диспетчер запускает все слушатели, которые были подписаны на это событие.
1. Можно ли/правильно ли при таком подходе делать так, что если один из слушателей вылетит с ошибкой, то делать откат и самого заказа, т.е. можно ли оборачивать в транзакцию сам переход состояния заказа вместе с обработчиками события. Или же результат работы обработчиков ни как не должен влиять уже на сам заказ. Если события отправляются в очередь, то понятно, что здесь уже не обернёшь все.
2. При проектировании системы с событиями, нужно ли проектировать с учетом того, что в любой момент может появится необходимость отправлять все события в очередь, т.е. они не сразу обработаются, а через какое-то время, и при этом ничего не должно сломаться. Другими словами, если мы используем события/обработчики то мы изначально понимаем что нам не должно быть важно, что какой-то обработчик выполниться не сразу после наступления события.
3. Если необходимо сделать так, чтобы после перехода заказа в какое то состояние, выполнилась ещё какая то операция, и ошибка в ней должна была откатить и сам заказ, то эту операцию необходимо поместить в один use case и обернуть все в одну транзакцию, при этом подход с тем, чтобы такую операцию поместить в обработчик события использовать нельзя. Верно ли это?
Гугли про saga pattern
источник

SP

Sergey Protko in PHP
Ивенты нельзя откатить (это факты того что что-то произошло) но можно запускать компенсационные транзакции
источник

АС

Альберт Степанцев... in PHP
google сторно
всё придумано до нас
источник

s

sergalius in PHP
Понял, спасибо
источник

АС

Альберт Степанцев... in PHP
ну или аналогия с системой контроля версий
откат в распределенной VCS в общем случае невозможен
источник

АС

Альберт Степанцев... in PHP
можно только накатить новое изменение
источник

КГ

Константин Грачев... in PHP
pff git rebase go brrrr
источник

АС

Альберт Степанцев... in PHP
нет
в ситуации, когда ваши коммиты разошлись по десятку репозиториев и задеплоены - нет
источник

/

/bin/cat in PHP
у всех сломается репо после rebase
источник

КГ

Константин Грачев... in PHP
git reset --hard origin/master go brr
источник

PA

Pavel Agaletskiy in PHP
В общем-то это не аналог. Так же можно сказать, что в случае с распределенноой системой и потребностью откатить состояние заказа, можно его просто удалить из базы. Как бы можно, но не стоит так делать
источник

BT

Bohdan Turchyk in PHP
Переслано от Alisa Kruglova
Выход восьмерки уже на этой неделе

Обсудим 25 ноября в стриме. Нескучный обзор новинок, советы по переходу и жаркий холивар о развитии языка. Будет возможность задать вопросы Никите Попову и Дмитрию Стогову, контрибьютерам языка!

Ведущие лайва:
- Александр Макаров (Yii), Роман Пронский (автор PHP Digest), Валентин Удальцов (автор канала Пых) и Альберт Степанцев (U'CANN).

Все начнется в 19:00 (Мск/Минск), 18:00 (Киев). Для участия достаточно зарегистрироватьсядостаточно зарегистрироваться
источник

SM

Sasha Mikhlyaev in PHP
ничоси
источник

SM

Sasha Mikhlyaev in PHP
альберт даже будет))
источник

АС

Альберт Степанцев... in PHP
Вы Стогова лучше послушайте
источник

АС

Альберт Степанцев... in PHP
он дело говорит
источник

PU

Pavel Ustyugov in PHP
а когда Симфони и Laravel будут поддерживать php 8?
источник

SM

Sasha Mikhlyaev in PHP
не там спрашиваешь))
источник

АС

Альберт Степанцев... in PHP
Pavel Ustyugov
а когда Симфони и Laravel будут поддерживать php 8?
а что такого в PHP 8, что данные фреймворки категорически откажутся работать на этой версии?
источник

AD

Andrey Dembitskyi in PHP
Pavel Ustyugov
а когда Симфони и Laravel будут поддерживать php 8?
а они не поддерживают?
источник