PlaceOrderCommand относится к размещению Заказа на внешнем месте исполнения.
Я предполагаю, что размещение Заказа во внешнем месте исполнения означает взаимодействие с внешней системой. Если да, то он не должен быть частью вашего домена. В этом случае вам нужно поднять Integration Event
.
. Как вы упомянули, вы можете поднять Command
как ProcessOrder
со своего домена. В этом Command
вы можете обновить Domain
(например, установить OrderStatus
на Processing
) и вызвать событие интеграции, например OrderArrived
, которое затем обрабатывается отдельным процессом.
От Документы Microsoft :
Целью событий интеграции является распространение подтвержденных транзакций и обновлений на дополнительные подсистемы, будь то другие микросервисы, ограниченный контекст или даже внешние приложения.
События интеграции должны основываться на асинхронной связи между несколькими микроуслугами (другими ограниченными контекстами) или даже внешними системами / приложениями.
Это событие интеграции вы обрабатываете как отдельный процесс (или рабочий). за пределами вашего Domain
. Это где ваш @Service
будет введен. Как только заказ успешно обработан, вы можете затем транслировать событие интеграции под названием OrderPlaced
.
Теперь любой подписчик, имеющий отношение к размещению заказа, подписался бы на событие. В вашем случае ваш Domain
заинтересован в обновлении состояния после размещения заказа. Следовательно, вы бы хотели Subscribe
до OrderPlaced
события в пределах вашего Domain
, чтобы обновить статус Order
.
Надеюсь, что это поможет.