Size: a a a

2021 February 03

КГ

Константин Грачев... in symfony
Sergei Baikin
У меня нет автоинкрементов но будет и с ними работать.
Событие содержит то что помнялось. Айдишник соотвенственно не менялся ну и нефин ему делать в событии.
В месадж бас же уходит DomainMessage котрый уже как врапер заворчаивает внутрь событие и знает откуда он был вытащен.

Примерно так
https://github.com/broadway/broadway/blob/master/src/Broadway/Domain/DomainMessage.php

Тоесть вы сохраняете сущность а потом достаете события упаковыаете из выплевываете во вне.

Если хочется через наследование решать тогда могу тоько bind или Reflection посоветовать
Как то сложно..
источник

SB

Sergei Baikin in symfony
Константин Грачев
Как то сложно..
Возможно я не настаиваю
Я предложил 2 варианта человеку
источник

A

AlexS in symfony
Sergei Baikin
У меня нет автоинкрементов но будет и с ними работать.
Событие содержит то что помнялось. Айдишник соотвенственно не менялся ну и нефин ему делать в событии.
В месадж бас же уходит DomainMessage котрый уже как врапер заворчаивает внутрь событие и знает откуда он был вытащен.

Примерно так
https://github.com/broadway/broadway/blob/master/src/Broadway/Domain/DomainMessage.php

Тоесть вы сохраняете сущность а потом достаете события упаковыаете из выплевываете во вне.

Если хочется через наследование решать тогда могу тоько bind или Reflection посоветовать
айдишник не менялся - он просто появился) новая сущность, генерирует какое-то событие например OrderCreated, потом сохраняется в базу, а потом обрабатывается событие.

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

SP

Sergey Protko in symfony
Sergei Baikin
У меня нет автоинкрементов но будет и с ними работать.
Событие содержит то что помнялось. Айдишник соотвенственно не менялся ну и нефин ему делать в событии.
В месадж бас же уходит DomainMessage котрый уже как врапер заворчаивает внутрь событие и знает откуда он был вытащен.

Примерно так
https://github.com/broadway/broadway/blob/master/src/Broadway/Domain/DomainMessage.php

Тоесть вы сохраняете сущность а потом достаете события упаковыаете из выплевываете во вне.

Если хочется через наследование решать тогда могу тоько bind или Reflection посоветовать
ивент должен содержать способ адресовать обратно того кто его породил. В целом айдишку "сущности" можно назвать метаданными и ввести какой-то процесс metadata enrichment в момент экстракта и да это будет работать...
источник

A

AlexS in symfony
Sergey Protko
так не надо менять... добавь рядом)
ну вот разве что так, да)
спасибо буду думать-пробовать)
источник

SB

Sergei Baikin in symfony
AlexS
айдишник не менялся - он просто появился) новая сущность, генерирует какое-то событие например OrderCreated, потом сохраняется в базу, а потом обрабатывается событие.

и вот в момент создания события OrderCreated - у этого ордера нету айдишки, она появляется сразу после сохранения, но ивент уже сгенерирован, а сущность к нему доступа не имеет
Почему не имеет а где он ивент то ваш, куда он делся от сущности которая еще не сохранилась?
источник

A

AlexS in symfony
Sergei Baikin
Почему не имеет а где он ивент то ваш, куда он делся от сущности которая еще не сохранилась?
нуок, имеет, но лезть в уже сгенерированные события и апдейтить их - странный какой-то манёвр
источник

A

AlexS in symfony
причем тот же условный Order не должен этим заниматься, класс же не об этом
источник

SP

Sergey Protko in symfony
меня смущает что ивент создается не полноценным но можно в целом попробовать как @GDXbsv предлагает.

Есть у нас некий ивент типа

abstract class Event
{
   public function forAggregate(string $aggregateType, string $aggregateId)
   {
       // clone
       modify
       return
   }
}


и по postFlush (где айдишки уже есть)

foreach($entities as $entity) {
   foreach ($entity->releaseEvents() as $event) {
       yield $event->forAggregate($entityType, $eventPK);
   }
}
источник

SP

Sergey Protko in symfony
тогда все кто на ивент подписаны будут получать ивент уже с айдишкой
источник

SB

Sergei Baikin in symfony
AlexS
нуок, имеет, но лезть в уже сгенерированные события и апдейтить их - странный какой-то манёвр
Ну есть вариант не лезть а воспользоватся враппером с композицией.

Генерить айди в базе тоже странная идея
Reflection и Closure ни чуть не хуже чтобы проставить айди
источник

SB

Sergei Baikin in symfony
Sergey Protko
меня смущает что ивент создается не полноценным но можно в целом попробовать как @GDXbsv предлагает.

Есть у нас некий ивент типа

abstract class Event
{
   public function forAggregate(string $aggregateType, string $aggregateId)
   {
       // clone
       modify
       return
   }
}


и по postFlush (где айдишки уже есть)

foreach($entities as $entity) {
   foreach ($entity->releaseEvents() as $event) {
       yield $event->forAggregate($entityType, $eventPK);
   }
}
Ну я просто когда то с broadway начинал
Сейчас тащю этот Domain Message чтобы сильно нчиего не ломать. А так в контексте моего мессадж баса полноценный ивент это DomainMessage. И все кто подписан получают и его тоже (ну типа контекста). А месадж бас просто не примет ничего кроме DomainMessage. Так что все ивенты типами гарантируют свою полноценность. Что у них будет айди номер время создание и тип.
источник

SP

Sergey Protko in symfony
я сча пытаюсь слазить с этих пруфовских и бродвеевский базовых классов... они больше вреда приносят чем пользы
источник

SB

Sergei Baikin in symfony
Sergey Protko
я сча пытаюсь слазить с этих пруфовских и бродвеевский базовых классов... они больше вреда приносят чем пользы
Я согласен но пока руки не доходят(

А где в итоге playhead, название агрегата породившего и его айдишник и время когда это было хранится?

Наследование от базового ивента или копипаст в каждый? И потом заполнение руками при каждом создании ивента?
источник

i

invariance in symfony
Кто шарит, есть ли в текущей версии доктрины маппинг релейшенов для embeddable сущностей? Знаю что точно было такое предложение, но не нашел инфы приняли его или нет. Спрашиваю потому, что пробую сейчас сделать релейшен внутри embeddable, и работает оно очень странно
источник

i

invariance in symfony
на 80% уверен что нет, но вдруг кто меня разубедит
источник

VM

Volodymyr Melko in symfony
invariance
на 80% уверен что нет, но вдруг кто меня разубедит
доку глянь по доктрине и там все будет
источник

i

invariance in symfony
Кайф
источник

i

invariance in symfony
Еще полезнее можно совет? Погуглить там и т.п.
источник

VM

Volodymyr Melko in symfony
invariance
Еще полезнее можно совет? Погуглить там и т.п.
погугли доку по доктрине и почитай ее
источник