CQRS - разрешенные зависимости для построения чтения модель с использованием событий и других источников информации

Мой вопрос относится к CQRS (разделение ответственности на команды и запросы) и механизму построения модели чтения (представлений). Насколько я понимаю, модель чтения строится обработчиками событий. Эти обработчики (также называемые денормализаторами) получают события домена и используют эти события для построения различных представлений данных.

Конкретное событие несет информацию об изменениях, сделанных в модели предметной области. Я думаю, что в некоторых случаях этой информации недостаточно для построения представления - т.е. в таком случае отсутствуют неизмененные поля, неизмененные объекты и т. Д.

Итак, мой вопрос:

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

  1. измененный объект, на который имеется прямая ссылка в случае?
  2. изменил агрегированный корень и любой объект, связанный с этим агрегатом?
  3. любой объект, извлеченный из репозитория?
  4. любой вид?

Что вы думаете о разрешенных зависимостях для обработчиков событий (денормализаторов)?

edit: Просто добавил простой пример к вопросу выше:

Предположим, что следующая модель:

AR: ProductOffering * имя * описание * категория * цена

AR: Клиент * имя * тип * метод: PurchaseProduct (productOffering), излучающий ProductPurchasedByCustomer, событие

, сущность: ProductInstance * клиент * productOffering

, событие: ProductPurchasedByCustomer * Пользовательский ИД * productOfferingId

view: ProductInventoryView * Пользовательский ИД * productOfferingId * Тип клиента * productOfferingName * productOfferingCategory * price

Как создать ProductInventoryView, используя только событие ProductPurchasedByCustomer? Как я могу написать денормализатор, чтобы отображать информацию о customerType, productOfferingName и т. Д.? Следует ли мне искать дополнительную информацию о customerType и productOfferingName из разных представлений?

5
задан Mariusz 13 December 2010 в 17:14
поделиться