Одновременное использование слишком большого количества архитектурных шаблонов может иметь такой эффект;Вы не одиноки ?.
Типичные примеры команд в CQRS содержат Command
и Command Handler
, но они должны иллюстрировать некоторые важные принципы:
- API-интерфейсы fire
Command
s и забудьте - API для
Command
s не возвращают данные вызываемому абоненту Command Handler
s выбирают Command
из очередей сообщений и обрабатывают их Command
s приведет к изменениям, которые станут видимыми / доступными в более поздний момент времени, благодаря возможной согласованности
Вам не нужно использовать Command
+ Command Handler
s, если вы толькозадача состоит в том, чтобы отделить запись от слоя чтения. Вы можете вызывать простые методы службы приложений из уровня API. Просто убедитесь, что вы следуете принципам CQRS, например, не разделяете код между сторонами записи и чтения, не возвращаете данные вызываемой стороне при write
/ изменениях и имеете конвейер событий для построения моделей запросов.
ItБыло бы также полезно выполнить фактическое изменение как часть фонового работника, а не службы приложений, чтобы обеспечить асинхронную рабочую модель.
Сказав, что следование шаблону Command
+ Command Handler
однако, это очень помогает вам, облегчая рассуждения об архитектурных решениях во время разработки.
Модели запросов, с другой стороны, обычно создаются для непосредственного обращения к запросам API. Другими словами, один и тот же агрегат или концепция в вашем домене может иметь несколько построенных структур модели запросов для удовлетворения различных требований API. Обычно вы возвращаете уже созданный Query Model
(без какой-либо последующей обработки) в ответ на синхронные вызовы API. Да, вы просто вызываете модель чтения непосредственно в своих API-интерфейсах REST или через методы-оболочки в службах приложений.