Это прекрасный пример ограниченных контекстов.
Событие, произошедшее в другой системе (или ограниченном контексте), представляющей тот же самый или шаг бизнес-процесса, не должно рассматриваться как событие, произошедшее в принимающей системе.
Событие Дебета в системе Флорист может иметь структуру, отличную от события Дебета, которое могло бы произойти в Системе отслеживания финансов.
Чтобы решить эту проблему, у меня была бы конечная точка, которая прослушивала бы события системы флориста, и из этого я бы заставил систему отслеживания финансов выдавать команду на основе информации в событии и, возможно, объединить ее с информацией в системе отслеживания финансов, если это необходимо. Место, где это происходит, можно рассматривать как клиента для системы отслеживания финансов или, возможно, даже как «службу домена», если хотите.
В данном конкретном случае приходит событие из системы Florist с информацией о транзакции, которая произошла в системе Florist (ограниченный контекст). Я бы не стал принимать какие-либо решения в службе домена, а отдал бы команду домену Системы финансового отслеживания, где принимается решение, и могут генерироваться события Системы финансового отслеживания. Если системное событие Флориста отображается в Системе отслеживания финансов неправильно, вы, вероятно, не хотите сообщать об этом системе Флориста в форме Запрос/Ответ или Подтверждение/Отказ. Мероприятие было опубликовано из Флориста, и вы нарушили бы шаблоны обмена сообщениями, если бы реализовали что-то подобное. Ваша инфраструктура обмена сообщениями должна позволять вам повторно отправить сообщение или даже исправить код получения и повторить отправку сообщения с новым кодом.
Однако, если вам действительно нужно сообщить об ограниченном контексте Florist, система Florist может подписаться на события из Системы отслеживания финансов, чтобы узнать, была ли транзакция успешно обработана. Это будет необходимо только в том случае, если основная система решает, может ли транзакция произойти или нет.
В случае, когда вы описываете, что Система отслеживания финансов — это скорее журнал транзакций, и единственное, что вам нужно сделать, это не рассматривать события Флориста как события Системы отслеживания финансов. Поместите что-то среднее между командами, которые приводят к событиям системы финансового отслеживания.
РЕДАКТИРОВАТЬ:
В ответ на ваше редактирование. Принимающий компонент должен отправлять команды в домен системы отслеживания финансов, который, в свою очередь, будет генерировать события (как обычно).
person
Mikael Östberg
schedule
10.08.2012