Иногда мне нужно запустить команду, зная только идентификатор сущности, но не агрегат, к которому она принадлежит.
Например:
У меня есть Order
агрегатные корни, к которымInvoice
ы принадлежат.Затем при регистрации фактического платежа по счету-фактуре доступен только идентификатор Invoice
.
Я могу сохранить отдельную таблицу / коллекцию "Счета-фактуры", где каждый документ / строка имеет только Order
ID, и только когда-либо вставляйте в него при публикации события InvoiceCreated
.
(или таблица общего назначения Entities
, где каждый элемент будет чем-то вроде {type: "invoice", ag: <ID>}
, возможно, добавит agType: "order"
)
Это кажется проблематичным, но я не уверен, каким образом.
Если этот «поиск» создается строго перед публикацией события, или с транзакционной публикацией события, это не кажетсякак если бы кто-то пришел, попросите об этом до того, как он существует, получая ложно-положительную ошибку «счет-фактура не существует».
Однако, делая это, когда / до публикуем событие, против когда /после применения это кажется необычным.
Какое здесь стандартное решение?
Обновление 1
Полагаю, одна проблема, которая приходит на ум, заключается в том, что, поскольку этозаполняется при публикации, а некогда применяется то, что наивное воспроизведение событий не воссоздает эту таблицу.Однако данные точно есть в потоке событий.И, кроме того, вряд ли когда-нибудь понадобится обстреливать эту таблицу из-за ее глупой простоты.Его можно сохранить независимо от изменений в схеме агрегатного состояния.Так что это не сильный аргумент против.