Size: a a a

2021 January 04

D

Dmitry in symfony
Одна из самых мощных экономик мира
источник

в

вαғғσмεттι in symfony
Maksim Masiukevich
И то, что они принтмают биткоины тому доказательство ;) в мире не так много мест, где сие можно провести легально
Киберрубля чтоль ждешь
источник

MM

Maksim Masiukevich in symfony
Dmitry
Одна из самых мощных экономик мира
Угу, напомни мне название бабломойки, которая там недавно схлопнулась
источник

MM

Maksim Masiukevich in symfony
Зацепив пол европы
источник

Ш

Шурик in symfony
Maksim Masiukevich
И то, что они принтмают биткоины тому доказательство ;) в мире не так много мест, где сие можно провести легально
Ну то есть речь не о том, что "покрывает все валюты", а о том, что "покрывает те валюты, которые один конкретный разработчик считает надёжными"
источник

D

Dmitry in symfony
Maksim Masiukevich
Угу, напомни мне название бабломойки, которая там недавно схлопнулась
Если уж на то пошло любой банк отмывает бабло чье-то. Весь мир так живёт.
источник

MM

Maksim Masiukevich in symfony
Шурик
Ну то есть речь не о том, что "покрывает все валюты", а о том, что "покрывает те валюты, которые один конкретный разработчик считает надёжными"
Валюты в рамках екомерса - iso 4217. Все прочее - хуита,  прикрученная сбоку
источник

MM

Maksim Masiukevich in symfony
Dmitry
Если уж на то пошло любой банк отмывает бабло чье-то. Весь мир так живёт.
Чушь)
источник

VK

Vladyslav Kopaihorod... in symfony
Dmitry
Если уж на то пошло любой банк отмывает бабло чье-то. Весь мир так живёт.
То тебе так рассказали
источник

D

Dmitry in symfony
Ясно. Верующие в непогрешимость мира :) на этом и завершим
источник

VK

Vladyslav Kopaihorod... in symfony
источник

Ш

Шурик in symfony
Maksim Masiukevich
Валюты в рамках екомерса - iso 4217. Все прочее - хуита,  прикрученная сбоку
Это специфика текущего домена
источник

MM

Maksim Masiukevich in symfony
Шурик
Это специфика текущего домена
Я написал тоже самое
источник
2021 January 05

A

Arky in symfony
Децимал в бэде, стринг и намбер формат
источник

VS

Valentin Saik in symfony
Подскажите в какую сторону смотреть если надо диспатчить не совсем доменные события только после определенного момента? (Обычно после сохранения ентити в бд)

Делаю так:

$entity = $someService->create(...);
flush();
dispatch($entity->releaseEvents());
return $this->json(['id' => $entity->getId()]);

и это отлично работает для доменных событий которые генерируются внутри ентити, но что если у меня сервис генерирует событие которое должно задиспатчиться после сохранения ентити?
Пример сервиса:
// SomeService::create(): Entity
$data = grabSomeData();
$entityId = uuid4();
$entity = new Entity($entityId, $data['field_1']...);
dispatch('dataGrabbed', $entityId, $data);
return $entity;

dataGrabbed событие надо диспатчить после flush()
но сам флаш происходит не в сервисе, а в контроллере, соответственно интересно как принято делать -
1. Перенести флаш в сервис и вызвать диспатч dataGrabbed + $entity->releaseEvents() ивентов в нём?
2. Добавить какой то глобальный сервис типа EventStore{events: Event[] + releaseEvents()} в который добавить dataGrabbedEvent, вызвать EventStore->releaseEvents() и задиспатчить его в контроллере после флаша
3. или есть готовое решение для этого?

1й вариант не нравится так как я не хочу что бы сервис решал когда делать флаш, может мне ещё надо что то сохранить в одной транзакции
2й вариант мне кажется вообще мрак, одно дело хранить события внутри ентити, совсем другое в сервисе который можно реюзать и наломать дров
источник

SP

Sergey Protko in symfony
Valentin Saik
Подскажите в какую сторону смотреть если надо диспатчить не совсем доменные события только после определенного момента? (Обычно после сохранения ентити в бд)

Делаю так:

$entity = $someService->create(...);
flush();
dispatch($entity->releaseEvents());
return $this->json(['id' => $entity->getId()]);

и это отлично работает для доменных событий которые генерируются внутри ентити, но что если у меня сервис генерирует событие которое должно задиспатчиться после сохранения ентити?
Пример сервиса:
// SomeService::create(): Entity
$data = grabSomeData();
$entityId = uuid4();
$entity = new Entity($entityId, $data['field_1']...);
dispatch('dataGrabbed', $entityId, $data);
return $entity;

dataGrabbed событие надо диспатчить после flush()
но сам флаш происходит не в сервисе, а в контроллере, соответственно интересно как принято делать -
1. Перенести флаш в сервис и вызвать диспатч dataGrabbed + $entity->releaseEvents() ивентов в нём?
2. Добавить какой то глобальный сервис типа EventStore{events: Event[] + releaseEvents()} в который добавить dataGrabbedEvent, вызвать EventStore->releaseEvents() и задиспатчить его в контроллере после флаша
3. или есть готовое решение для этого?

1й вариант не нравится так как я не хочу что бы сервис решал когда делать флаш, может мне ещё надо что то сохранить в одной транзакции
2й вариант мне кажется вообще мрак, одно дело хранить события внутри ентити, совсем другое в сервисе который можно реюзать и наломать дров
Я юзаю декоратор с буфером и по флашу уже пускаю события дальше
источник

VS

Valentin Saik in symfony
Sergey Protko
Я юзаю декоратор с буфером и по флашу уже пускаю события дальше
Ну этот "буффер" меня пугает, у меня крутится долгоживущее приложение, в теории может произойти такое что в буфер попадут 2 события но они должны будут пойти дальше после разных флашей

Сразу рождается решение типа
$dispatchAfter = new DispatchAfterEntityFlushed($entity)
buffer.push(Event, $dispatchAfter)

Ну и после флаша проверять какие именно ивенты надо диспатчить, но тогда этот буфер может засоряться если событие произошло но ентити не флашится (по разным причинам, может где-то внутренняя валидация какого-то объекта не прошла), и как его чистить я пока не придумал, да и выглядит не очень..
источник

VS

Valentin Saik in symfony
Вообще с этими событиями код становится каким то непредсказуемым и непонятным, вот придёт новый человек на проект, увидит в контроллере что то вроде

$entity = $service->someAction()
flush()
dispatch($entity->releaseEvents())

Ему чтобы понять что именно происходит в этом случае надо будет:
1. Посмотреть какие ивенты генерирует сервис
2. Посмотреть какие ивенты генерирует ентити
3. Посмотреть на все обработчики (а они могут генерировать ещё события)
4. Понять почему одни события добавлены в буфер сущности, а другие в буфер декоратора

А я ведь наоборот пытаюсь сделать код менее связаннм, что должно упрощать работу с ним.. Иногда задаю вопрос себе что я вообще делаю, и хотелось бы ответить что пытаюсь сделать хорошо, удобно, понятно и красиво, но в итоге выходит что-то такое с чем я сам через пол года не разберусь читая этот код, а всего то надо отправить парочку команд в очередь =(
источник

VS

Valentin Saik in symfony
Короче я наверное просто верну список событий с сервиса, а контроллер их задиспатчит, в этом случае
Будет явно видно что
1.  сервис отдает какие то ивенты
2. Они диспатчатся после флаша

Таким образом понятность кода выше, нету проблем с очисткой буфера и невозможно записать в буфер событие порожденное в другом месте.
Из минусов - не красиво,  неудобно прокидывать события на несколько уровней вверх, придется делать какие-то ReturnObject в который помещать сам ответ сервиса и рядом ложить буфер ивентов
источник

SP

Sergey Protko in symfony
Valentin Saik
Ну этот "буффер" меня пугает, у меня крутится долгоживущее приложение, в теории может произойти такое что в буфер попадут 2 события но они должны будут пойти дальше после разных флашей

Сразу рождается решение типа
$dispatchAfter = new DispatchAfterEntityFlushed($entity)
buffer.push(Event, $dispatchAfter)

Ну и после флаша проверять какие именно ивенты надо диспатчить, но тогда этот буфер может засоряться если событие произошло но ентити не флашится (по разным причинам, может где-то внутренняя валидация какого-то объекта не прошла), и как его чистить я пока не придумал, да и выглядит не очень..
Как такое может быть? Что значит ивенты для разных флашей?
источник