Size: a a a

2020 October 10

A

AlexS in symfony
Павел Г.
Хороший вопрос, присоединяюсь к слушанью ) я думал сделать метод initRemoveEvents в сущности при удалении генерирующий ивент/ивенты, который вызывался бы удаляющим сервисом, но думаю херня.
Ну я думаю, что это сомнительный ход ибо сущность не должна знать что там кому нужно делать после того, как её удалили. Это вроде как не её дело
источник

SP

Sergey Protko in symfony
AlexS
Всем привет, есть такой вопрос: есть "сущность", которая хранится не в базе, а в апишке соседнего микросервиса. По ходу своей жизни она может бросать разные события - некое подобие доменных событий. Как правильно организовать эти события при удалении этой сущности? Как я понимаю, сама сущность ничего не должна знать о том, что её удаляют. Но если мне при удалении сущности нужно, например, сделать какие-то действия со штуками, которые хранятся в её полях, то как быть? Кидать событие из того места, которое отвечает за удаление сущности?
фактически эти ивенты может кидать кто угодно кто знает что что-то произошло, не обязательно сущность. Там скорее сложность в том что ивент всеравно должен лежать в списочке пока не закоммитили транзакцию что бы представлять правду.  Мол по post flush отправлять все накопленные события.
источник

ПГ

Павел Г. in symfony
AlexS
Ну я думаю, что это сомнительный ход ибо сущность не должна знать что там кому нужно делать после того, как её удалили. Это вроде как не её дело
Согласен поэтому и подразумевал, что херня.
Но тут дело в том, что она и не знает. Она генерит ивент "я удаляюсь" со своими свойствами.
Просто если генерить снаружи, то не получить доступ к свойствам + надо выкинуть ее уже после флаша, тоже не совсем понятно как. Если только сервис который ее удаляет сгенериит ивент который будет обратываться после как флаша совместно с обработкой доменных событий.
источник

ПГ

Павел Г. in symfony
А вот такой вопрос, который у меня возник в этой же задаче.
Вот есть сущность, у нее есть изображение (сущность). Настроено каскадное удаление в БД. Надо удалить физ картинку после удаление основной сущности.  Если я ее удаляю до флаша -  то в случае ошибки флаша я теряю картинку, если я ее удаляю после - я не могу получить доступ к изображению, так как оно удалилось каскадно.
Это получается в более менее грамотной архитектуре не надо пользоваться каскадный удалением в БД если требуется сайд эффект и лавинно вручную удалять все сущности через ивенты?
источник

SP

Sergey Protko in symfony
Павел Г.
Согласен поэтому и подразумевал, что херня.
Но тут дело в том, что она и не знает. Она генерит ивент "я удаляюсь" со своими свойствами.
Просто если генерить снаружи, то не получить доступ к свойствам + надо выкинуть ее уже после флаша, тоже не совсем понятно как. Если только сервис который ее удаляет сгенериит ивент который будет обратываться после как флаша совместно с обработкой доменных событий.
а какие могут быть свойства у ивента что оно удаляется?)
источник

ПГ

Павел Г. in symfony
Sergey Protko
а какие могут быть свойства у ивента что оно удаляется?)
Кейс с изображением и физ удалением
источник

SP

Sergey Protko in symfony
Павел Г.
А вот такой вопрос, который у меня возник в этой же задаче.
Вот есть сущность, у нее есть изображение (сущность). Настроено каскадное удаление в БД. Надо удалить физ картинку после удаление основной сущности.  Если я ее удаляю до флаша -  то в случае ошибки флаша я теряю картинку, если я ее удаляю после - я не могу получить доступ к изображению, так как оно удалилось каскадно.
Это получается в более менее грамотной архитектуре не надо пользоваться каскадный удалением в БД если требуется сайд эффект и лавинно вручную удалять все сущности через ивенты?
все так. каскадное удаление это удобно пока не потерял данных лишних или пока еще каких проблем не получил. С этим надо быть осторожным.
источник

SP

Sergey Protko in symfony
Павел Г.
Кейс с изображением и физ удалением
мол у тебя информация о физическом месторасположении файла внутри? и больше ничего нет?
источник

ПГ

Павел Г. in symfony
Sergey Protko
мол у тебя информация о физическом месторасположении файла внутри? и больше ничего нет?
Ну да, простой кейс: сущность картинка и именем файла внутри. Если я удаляю сущность я теряю информацию о физ расположении изображения.
А какие есть еще варианты?
источник

A

AlexS in symfony
Павел Г.
Ну да, простой кейс: сущность картинка и именем файла внутри. Если я удаляю сущность я теряю информацию о физ расположении изображения.
А какие есть еще варианты?
У меня аналогичная ситуация, только картинка не одна, а пачка
источник

SP

Sergey Protko in symfony
вот честно хз, у меня были кейсы когда "сущности картинки" были привязаны к другим сущностям и по ивенту от владельца я удалял картинки связанные с оным - сначала физически потом в базе. Поскольку эти штуки через очередь выполнялись я могу какие-то гарантии что все будет выполнено предоставить
источник

ПГ

Павел Г. in symfony
AlexS
У меня аналогичная ситуация, только картинка не одна, а пачка
Ну иу  меня пачка
источник

ПГ

Павел Г. in symfony
Sergey Protko
вот честно хз, у меня были кейсы когда "сущности картинки" были привязаны к другим сущностям и по ивенту от владельца я удалял картинки связанные с оным - сначала физически потом в базе. Поскольку эти штуки через очередь выполнялись я могу какие-то гарантии что все будет выполнено предоставить
Вот вы физически удаляете до. Это вариант. Но вот в случае ошибки мы теряем физ файл а сущность на месте.
источник

A

AlexS in symfony
Даже не так, у меня не картинка, а пачка айдишников картинок на cdn
источник

SP

Sergey Protko in symfony
Павел Г.
Вот вы физически удаляете до. Это вариант. Но вот в случае ошибки мы теряем физ файл а сущность на месте.
ну у меня этот кейс очереди хэндлят - ошибка - ретраи
источник

ПГ

Павел Г. in symfony
Sergey Protko
ну у меня этот кейс очереди хэндлят - ошибка - ретраи
Понял принял :) Спасибо за ответ
источник

SP

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

SP

Sergey Protko in symfony
тот же вариант что и с очередью и те же ретраи. только без доп инфраструктуры
источник

A

AlexS in symfony
У меня не критично, чтоб картинки обязательно удалились. У меня важнее, чтоб они не удалились до удаления сущности. Но это решается postFlush'ем или его эмуляцией если речь об апи. Собственно вопрос был в том, откуда и как событиями пулять :)

Всем спасибо за подсказки, буду пробовать делать аналог postFlush в апихе)
источник

j

jenia in symfony
Скажите как можно добится такого вывода при запросе api ?

Интересует поля: message, status
источник