Если у вас есть несколько систем, которые объединены событиями, и все они используют источники событий. Где вы храните события?
В моем случае у меня есть три системы:
Каждый раз, когда в одной из этих систем происходит событие домена, событие публикуется и может быть обработано другими системами. Все системы используют источники событий.
Интересно, где бы вы сохраняли события. Конечно, каждая система должна хранить все обработанные ею события, потому что она использует источник событий и, следовательно, зависит от событий, которые она однажды обработала.
Но как насчет других событий, которые не нужны, и поэтому система не подписывается? Я борюсь с тем фактом, что требования могут измениться, так что системе придется обрабатывать события из прошлого, которые не сохранялись. Откуда бы вы взяли эти события, если бы системе нужно было обрабатывать события, на которые она не подписывалась, когда они происходили?
Я думаю, что на данном этапе существует большая разница между системами, в которых не используется источник событий. Если вам необходимо реализовать функцию в системе A, которая зависит от данных, которые недоступны в A, но в другой системе B, и вы сохраняете текущее состояние с помощью инструмента ORM, такого как NHibernate, вы можете просто импортировать эти данные из A в B . Поскольку система, в которой используется источник событий, зависит от событий, чтобы перейти в текущее состояние, вам необходимо импортировать все события, которые вы пропустили в прошлом, но которые необходимы сейчас.
Для меня есть несколько разных подходов к этому проблема.
Как вы справляетесь с такой ситуацией? Где вы сохраняете свои события?
Edit
Спасибо, Рой Диктус за ваш ответ. Я все еще не знаю, как поступить в следующей ситуации:
На веб-сайте публикуются события CustomerRegistered, CustomerPurchasedProduct и CustomerMarkedProductAsFavorite. В текущей версии серверной части клиенты должны отображаться, а их покупки должны отображаться. То, что покупатель отмечен как фаворит, в этой версии системы не интересует. Таким образом, бэкэнд подписался только на CustomerRegistered и CustomerPurchasedProduct.
Теперь отдел маркетинга также хочет, чтобы информация о любимых продуктах отображалась на странице сведений о клиенте.Поскольку серверная часть не подписывалась на CustomerMarkedProductAsFavorite, эта информация недоступна в серверной части. Откуда мне получить эту информацию?