Как моделировать сложные классы запросов в CQRS - PullRequest
0 голосов
/ 03 октября 2018

Как моделировать классы запросов (CQRS), учитывая, что данные накапливаются из разных мест, а затем поверх этих данных запускается бизнес-логика.В настоящее время у нас есть код для извлечения необходимых данных в классе Manager и бизнес-логики в Domain Model.Есть ли способ лучше.предложения высокого уровня помогут.Hiererachy является контроллером webapi-> Manager-> DomainModel | -> Инфраструктура (для получения необходимых данных)

Ответы [ 2 ]

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

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

Модели записи (агрегированные корни) предназначены для обеспечения согласованности и инвариантов домена, в то время какМодели чтения в основном используются для создания пользовательского интерфейса и / или API.

Если вы разрабатываете простой домен для блога, у вас может быть совокупность Post и PostSummary, а также PostDetails или дажепростой Post.

Оба названы одинаково, но в другом контексте использования.

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

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

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

Похоже, что вы делаете только часть C в CQRS, а не Q. В CQRS есть 2 модели данных, одна из которых обновляется с помощью команд (модель записи), а другая - специально для целей отображения.(прочитанная модель).Когда команда вносит изменения в данные, она загружает полный агрегат с бизнес-правилами из модели записи, вносит соответствующие изменения и сохраняет.Затем (обычно путем отправки сообщения) запрашивается обновление модели чтения.

Модель чтения - это набор таблиц, специально созданных для определенных целевых страниц пользовательского интерфейса.Дублирование данных везде.Идея состоит в том, что чтение должно быть очень быстрым, потому что это просто запрос "select *" из таблицы чтения.

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

...