Мой вопрос связан с CQRS (разделение ответственности за команды и запросы) и механизмом, который строит модель чтения (представления). Насколько я понимаю, модель чтения строится обработчиками событий. Эти обработчики (также называемые денормализаторами) получают события домена и используют эти события для построения различных представлений данных.
Конкретное событие содержит информацию об изменениях, сделанных в модели предметной области. Я думаю, что в некоторых случаях этой информации недостаточно для построения представления - то есть неизмененные поля, неизмененные объекты отсутствуют в таком событии и т. Д.
Итак, мой вопрос:
Допускается ли, чтобы денормализатор, отвечающий за построение модели чтения, обращался не только к событиям, но также:
- измененная сущность, на которую ссылаются напрямую
в случае?
- изменен агрегированный корень и любой
юридическое лицо, связанное с этой совокупностью?
- какая-либо сущность извлечена из хранилища?
- любой вид?
Что вы думаете о допустимых зависимостях для обработчиков событий (денормализаторов)?
edit: Только что добавил простой пример к вопросу выше:
Предположим, следующая модель:
AR: ProductOffering
* название
* описание
* категория
* цена
AR: Клиент
* название
* тип
* Метод: покупка продукта (productOffering), который испускает
Событие ProductPurchasedByCustomer
сущность: ProductInstance
* покупатель
* productOffering
событие: ProductPurchasedByCustomer
* Пользовательский ИД
* productOfferingId
просмотр: ProductInventoryView
* Пользовательский ИД
* productOfferingId
* Тип клиента
* productOfferingName
* productOfferingCategory
* цена
Как построить ProductInventoryView, используя только событие ProductPurchasedByCustomer? Как я могу написать денормализатор для отображения информации о customerType, productOfferingName и т. Д.?
Должен ли я искать дополнительную информацию о customerType и productOfferingName из разных представлений?