Создать VO из сущности - PullRequest
0 голосов
/ 16 октября 2018

Я создаю электронную коммерцию с DDD и Event Sourcing, CQRS.Моя идея состоит в том, чтобы каждый AR был отдельным в микросервисе.

В моей корзине покупок AR мне нужен предмет VO с productId и ценой, потому что цена не меняется после добавления в корзину.

У меня есть другой продукт AR, который контролирует цену.

Моя проблема в том, как получить цену от продукта AR без синхронного запроса к продукту, поскольку я использую архитектуру событий?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если у вас есть два микросервиса, каждый из них может публиковать поток событий.Микросервис ShoppingCart может использовать события PriceChanged от микросервиса вашего Продукта и поддерживать локальный кэш последней цены за Продукт.Когда вы добавляете товар в ShoppingCart, вы будете ссылаться на локальный кеш цен.

Этот же подход к прослушиванию событий в качестве средства связи расширяется от межагрегатного до межузлового контекста или межмикросервисного и даже межсистемного.В зависимости от вашей чувствительности к изменениям цен, вам, возможно, придется использовать другие подходы, как описано, но я предполагаю, что у вас есть некоторая терпимость к возможной последовательности, учитывая ваш выбор в паттерне CQRS + ES.

0 голосов
/ 16 октября 2018

По сути, вы пытаетесь скопировать информацию из одного совокупного корня в другой.

Существует два подхода, которые вы можете использовать.

Один из них - думать о кеше - мы передаем в корзину покупок экземпляр службы домена, которая знает, как получить идентификатор корреляции (код продукта?) И получить кэшированную копию цены.Таким образом, у нас есть фоновый процесс, который копирует информацию о ценах из микросервиса ценообразования в микросервис корзины покупок, а затем автономная корзина полагается на локально кэшированную копию цены.

Важное замечание: в этом нет ничего плохогос включением метаданных своевременности в кеш, так что в корзину с острыми данными можно включить информацию о том, является ли кэшированная информация «слишком старой».

Другая более прямая - есть метод, с помощью которого вы можете отправитьвведите цену в корзину и создайте некоторую логику оркестровки, которая определяет, для каких корзин нужны цены, а затем отправьте команду в корзину с соответствующей ценой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...