Size: a a a

2021 August 02

AD

Andrey Dmitriyev in symfony
Спасибо!
источник

ПГ

Павел Г. in symfony
Этот вот flusher (сам его юзаю), честно говоря тоже костыль  над доктриной и привязка к ней. По хорошему должен быть как раз какой нить save в репозитории и только. Но опять таки просто так запихать flush в репозиторий не получится из-за глобального UoF
источник

AD

Andrey Dembitskyi in symfony
"костыль" над unit of work
источник

АЯ

Андрей Ява in symfony
в репе сейва не должно быть. в репе должен быть add
источник

АЯ

Андрей Ява in symfony
а вот флаш - "применить все изменения" как раз норм.
это просто разные подходы.
источник

АЕ

Александр Ерин... in symfony
Флашер это не только обвязка над доктриновским флашером, там может жить, например, штука, которая релизит события из сущности, чтобы они вылетали в систему в момент сохранения сущностей в БД, ни раньше ни позже. (возможно даже в одной транзакции, если события улетают в шину через БД)
источник

ПГ

Павел Г. in symfony
Меняем реализацию репозитория где нет этого коммита UoF, как быть?
источник

ПГ

Павел Г. in symfony
Да понятно это все, Елисеевская реализация.
источник

АЕ

Александр Ерин... in symfony
Ну, да, как по мне она самая гибкая, по крайней мере, из того что я уже успел попробовать, поэтому активно ее продвигаю
источник

ПГ

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

ПГ

Павел Г. in symfony
Опять таки чем этот save в репо отличается от какого то отдельного flush отдлеьного класса ?
источник

АЯ

Андрей Ява in symfony
1. флаш отдельного класса не должно существовать
2. сейв это вообще не метод репы
источник

АЕ

Александр Ерин... in symfony
почему на один агрегат? А если в транзакции затрагивается два?
У одного пользователя списали 10 рублей, другому добавили, уже два агрегата участвуют. Если это делать в разных транзакциях то можно на ровном месте потерять консистентность в БД(либо деньги из воздуха появятся, либо исчезнут вникуда)
источник

ПГ

Павел Г. in symfony
1. Ваша реализация, где должен быть flush? 2. Спорить не буду, тут конечно да, есть момент что лучше чтобы save не было. Но если разгрести п1.
источник

АЯ

Андрей Ява in symfony
флаш должен быть в конце итерации или перед выходом. типа "сдампить на диск".
другими словами в моём понимании приложение должно работать с объектами в памяти, при необходимости из дотягивая из базы.
и не воспринимать флаш как метод сохранения объектов, а просто как "дамп изменений на диск для повторного переиспольования"
источник

ПГ

Павел Г. in symfony
В простом случае да, обмазаться транзакциями простое решение. Но есть правило 1 агрегат - одна транзакция. Короче сложно, сам все это не совсем понимаю, тем более в реализации.
источник

АЕ

Александр Ерин... in symfony
Понял, ну это тогда значит больше в тему разговора о дроблении функционала на UseCase, чтобы конкретный хэндлер всегда работал только с одним агрегатом и не трогал соседние
источник

ПГ

Павел Г. in symfony
Юзкейсы могут вроде как работать с несколькими агрегатами, на то они и юзкейсы.
источник

ПГ

Павел Г. in symfony
@shaman_alex вопрос с счетом кстати интересный, как он должен реализовываться с этим правилом :)
источник

VM

Volodymyr Melko in symfony
ну так не пишите сценариев, гдемодифицируете больше 1 аггрегата, в уов будут только его изменения и все удачно зафлашится =)
источник