CQRS + источник событий:(правильно ли, что )команды обычно передаются с точки -на -, а события домена передаются через pub/sub?

Не знал, как сократить это название.

Я в основном пытаюсь понять концепцию CQRS (http://en.wikipedia.org/wiki/Command-query_separation). и родственные понятия.

Хотя CQRS не обязательно включает в себя обмен сообщениями и источник событий, кажется, что это хорошая комбинация (, как видно из множества примеров / сообщений в блогах, сочетающих эти концепции )

. Учитывая случай использования -для изменения состояния для чего-то (, скажем, для обновления вопроса по SO ), считаете ли вы следующий поток правильным (в соответствии с передовой практикой )?

  • Система выдает агрегированную команду UpdateQuestionCommand, которая может быть разделена на несколько более мелких команд :UpdateQuestion, нацеленных на корневой агрегатный вопрос, и UpdateUserAction (для подсчета баллов и т. д. ), нацеленных на корневой совокупный вопрос пользователя. Они отправляются асинхронно с использованием обмена сообщениями с точки -на -.

  • Совокупные корни делают свое дело, и если все идет хорошо, запускают события QuestionUpdated и UserActionUpdated соответственно, которые содержат состояние, переданное на аутсорсинг в хранилище событий... для сохранения, yadayada, просто для завершения, на самом деле это не главное.

  • Эти события также помещаются в очередь публикации/подписки для трансляции. Любой подписчик (, среди которых, вероятно, один или несколько проекторов, создающих представления для чтения ), может свободно подписываться на эти события.

Общий вопрос :Действительно ли наилучшей практикой является передача команд от точки -к -точке (, т.е. :Получатель известен ), а события передаются (То есть :приемник (с )неизвестны )?

Предполагая вышеизложенное, в чем будет преимущество/недостаток разрешения транслировать команды через pub/sub вместо точек -— -?

Например :При передаче команд при использовании Saga(http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/)может быть проблемой, поскольку посредническая роль, которую должна играть сага в случае сбоя одного из корней агрегата, затруднена, потому что сага не знает, какие совокупные корни участвуют с самого начала.

С другой стороны, я вижу преимущества (гибкости )при разрешении широковещательных команд.

Любая помощь в прояснении моей головы высоко ценится.

6
задан Geert-Jan 19 July 2012 в 21:47
поделиться