CQRS, параметры команд / событий должны содержать все, что нам нужно? - PullRequest
0 голосов
/ 01 августа 2011

мое приложение использует CQRS, у меня есть случай, когда у меня есть команда «AddApplicationToGroupCommand» со следующими параметрами:

class AddApplicationToGroupCommand
+ Guid GroupId; // AggregateRootId
+ string ApplicationName;

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

Мой вопрос касается лучших практик.В итоге я хочу, чтобы мой EventHandler вставлял в приложение таблицы следующие параметры

Table Applications
int ApplicationId
varchar(255) ApplicationName
varcher(255) GroupName

Как видите, мне нужно GroupName, когда я собираюсь вставить в таблицу.Поэтому, чтобы сделать это, у меня есть два способа сделать это:

Либо я передаю свой groupId, как я это делал выше, затем в моем EventHandler мне придется запрашивать мою группутаблица для того, чтобы получить имя groupId.Либо я передаю GroupName в параметрах моей команды выше, затем в моем eventHandler я могу напрямую сделать

myContext.Applications.Insert(applicationName, groupName)

Что говорит CQRS?

Спасибо, ребята.

[Отредактировано для уточнения моей цели]

1 Ответ

4 голосов
/ 01 августа 2011

Я бы посоветовал больше о вашем домене, чем о CQRS.

Если вы следуете DDD, то это будет зависеть от агрегатов - является ли Группа отдельным Агрегатом? Если да, то да, вы будете иметь дело с идентификаторами (как правило) и будете искать соответствующие данные в вашей команде, используя запрос Reporting, чтобы найти имя.

Если это не другой агрегат, то наличие имени группы не нарушает такие проблемы.

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

...