Account, і є різні entity що відносяться до нього як many-to-one. ці entity створюються, редагуються та видаляються по api. але я хочу підключити чергу rabbitmq, де літають DTOшки з цими entity і синхронізуватися з іншими власними сервісами не через апі, а через messages в чергах.
а тепер питання:
всі DTO для цих entity, що можуть прилетіти через чергу, виключно для Account:ID = 1. і я в кожному хендлері хочу мати обʼєкт цього Account щоб не робити кожен раз $this->accountRepository->find(1); я можу приліпити MessageMiddleware, який буде смикати цей account, але як його прокинути в handler і чі варто це робити?
ты хочешь передавать сущности в самом сообщении или при получении сообщения автоматически загружать сущность по ид?
2. я отримую повідомлення, сформовані в іншому сервісі. і вже на етапі отримання я знаю, що ці повідомлення виключно для Account:1 і більше ніяк бути не може. і не хочу в кожному з 20 хендлерів діставати один і той самий Account, перевіряти чи він існує, чи він той самий що треба і т.п.
твои хендлеры выглядят как то так или жирнее на много? public function handle(SomeMessage $message): void { $account = $this->accounts->find($message->accountId); $account->doSomething(...); $this->accounts->save($account); }
приблизно так. це будуть чисто CRUD хендлери (тільки без "R" :). тікльки замість $message->accountId буде константа
очень много зависит от деталей тут, будет ли меняться аккаунт, что именно ты хочешь делать в этих хендлерах, могут ли быть другие аккаунты
думаю що придумав. винесу такі хендлери в окремий інтерфейс і напишу для них фабрику. в конструктор буду класти потрібний Account
посмотри в эту сторону https://docs.ecotone.tech/modelling/command-handling/state-stored-aggregate, рано или поздно все равно к такому придешь скорее всего, эту либу конкретно я не использовал, но концептуально там все более менее
Обсуждают сегодня