2015-08-05 2 views
3

Я работаю над веб-приложением для выставления счетов, которое использует источники событий и CQRS.Денормализаторы CQRS/ES

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

Я закончил тем, что передал сам агрегат, который содержит реальные рассчитанные данные, на шине обмена сообщениями, а не только события, и денормализаторы слушали его вместо событий.

Это сделало его более простым для меня, но, похоже, отличается от рисунка. Этот подход не упоминался ни в одной из статей, которые я прочитал.

Мне понравилась идея пропустить только события на автобусе, и каждый денормализатор отреагировал на то, что ему нужно, но на практике это стало более громоздким.

Мне бы хотелось услышать, что вы думаете.

Благодарим за помощь!

+0

«Скопируйте много логики»: какая логика в точности? Можете ли вы привести пример? – guillaume31

+0

@ guillaume31 Конечно, например, пользователь добавляет налог на счет-фактуру. У меня есть событие TaxAdded (курс: Двойной), который изменяет общую сумму счета. Я хочу обновить как сводку, так и подробные мнения, добавив сумму налога в общую сумму счета. Пропустив сам агрегат, я могу просто выполнить вычисление один раз (в совокупности) и обновить оба представления на основе этого вычисления. – amitayh

+3

. Вы также можете просто выполнить расчет один раз в совокупности и включить только данные, которые были изменены вместе с событием (например, новая сумма вместо ставки налога). Не нужно передавать всю совокупность. – guillaume31

ответ

2

Как было предложено guillaume31 в приведенном выше комментарии, вы можете просто обогатить свою модель домена специальными событиями, такими как NewTotalComputed. В зависимости от количества событий это может, однако, скоро загромождать вашу модель домена.

В качестве альтернативы вы можете реорганизовать вычислительную логику в специальный класс стратегии, который используется как из модели домена (совокупный корень), так и для модели чтения.

+1

True. Но я не обязательно предполагал новое событие. Вы можете хранить «TaxAdded», который является ИМО более раскрываемым, и отправляйте NewTotal вместо/в дополнение к TaxRate вместе с ним. – guillaume31

 Смежные вопросы

  • Нет связанных вопросов^_^