У меня вопрос не совсем по симфони, но рискну) вчера

я задавал его в соседнем чате но там как-то всё скатилось в срач "автоинкремент против uuid", что никак не прояснило сути вопроса)

собсно сабж: а подскажите, как правильно разруливать получение айдишки для доменных событий?

сейчас все события у меня из сущностей вытягиваются в отдельном слушателе доктриновских событий на postFlush

по идее, в объекте может поменяться что угодно, потому в доменное событие передаётся единственная стабильная штука - это айдишник (база mysql, айдишник - автоинкрементный). но некоторые события могут произойти еще до того, как у сущности появилась айдишка. как правильнее? передавать весь объект в событие, а айдишка будет востребована после того, как сущность сохранилась? но вся сущность в событии не особо-то и нужна. или же передавать в событие какое-то замыкание из которого можно будет получить id? или еще какие-то варианты? я сам склоняюсь к тому, чтоб передавать сущность, но может есть какие-то более клёвые варианты? менять базу и делать айдишки uuid - не предлагать)

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

какой самый правильный подход?
спасибо за ответы)

12 ответов

4 просмотра

делать uuid)))

E- Автор вопроса
Vlad Kopaihorodskyi
делать uuid)))

Я бы с удовольствием, но это не вариант(

заведи себе генератор интовых айдишек и с него доставай перед флашем, если надо

У меня нет автоинкрементов но будет и с ними работать. Событие содержит то что помнялось. Айдишник соотвенственно не менялся ну и нефин ему делать в событии. В месадж бас же уходит DomainMessage котрый уже как врапер заворчаивает внутрь событие и знает откуда он был вытащен. Примерно так https://github.com/broadway/broadway/blob/master/src/Broadway/Domain/DomainMessage.php Тоесть вы сохраняете сущность а потом достаете события упаковыаете из выплевываете во вне. Если хочется через наследование решать тогда могу тоько bind или Reflection посоветовать

Константин Грачев
Как то сложно..

Возможно я не настаиваю Я предложил 2 варианта человеку

E- Автор вопроса
Sergei Baikin
У меня нет автоинкрементов но будет и с ними работ...

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

Sergei Baikin
У меня нет автоинкрементов но будет и с ними работ...

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

E
айдишник не менялся - он просто появился) новая су...

Почему не имеет а где он ивент то ваш, куда он делся от сущности которая еще не сохранилась?

E- Автор вопроса
Sergei Baikin
Почему не имеет а где он ивент то ваш, куда он дел...

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

E
нуок, имеет, но лезть в уже сгенерированные событи...

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

Похожие вопросы

Обсуждают сегодня

'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Есть полностью собранная база "шрифтов" - подобных символов?
Shen
9
Дорогие друзья, есть тут те, Кто рад поучаствовать в работе и в команде над игровой платформой? Мы делаем игровую и уникальную платформу. Стек платформы Go и React. Нам ...
Александр Цивин :)
2
Короче получается только кнопки не поменять А кнопки вроде тоже слетают при редактировании не?
inc.
10
Тг будет банить бота который принимает донаты без stars? Бот буквально на 10-20 человек
Vexylon
6
а у тя шо за бот?
Андрей
6
Кто сколько за бота берёт? (Я покупать не хочу)
Ivan Aleksandrovich
10
Век живи, век учись и продолжай удивляться Carbon Оказывается, в Carbon дату можно задавать даже текстом 😲 <?php use Carbon\Carbon; $october_date = new Carbon("last sunday o...
Igor
3
или ты хочешь сказать что это по юникоду не дефолтные буквы?
Roma
4
Приветы. Если бот доступен только пользователям из России и Беларуси, старсы для него неизбежны? Как Apple планируется собирать платежи с покупок в сторе на территориях, где у...
Prokhor Chulkov
8
Карта сайта