Я упрощу свою проблему:
Мой LightsState API может принимать 2 типа входных данных: lightOn {lightId: ##}
и lightOff {lightId: ##}
. (ввод AMQP, но здесь неуместен)
Эти входные данные хорошо переводятся в 2 команды: TurnLightOnCmd
и TurnLightOffCmd
.
Эти команды создадут 2 события: LightTurnedOnEvent
и LightTurnedOffEvent
.
Эти события будут применены к Light Aggregate
, а постоянной проекцией будет state of the light
.
Все хорошо, пока здесь.
Но поскольку входных данных нет: create light
, я не могу сделать из этого CreateLightCmd
. Я могу вызывать CreateLightCmd
только тогда, когда получаю ввод lightOn
с НОВЫМ lightId
для создания Light Aggregate
, а затем также применяю к нему TurnLightOnCmd
.
Я не уверен, как справиться с этим, а также следовать хорошим практикам CQRS. Можно ли вызвать сторону запроса со стороны команды, чтобы проверить, есть ли light exists by id
, а затем, если необходимо, сначала вызвать CreateLightCmd
? Или я должен сделать запрос к БД со стороны команды и оставить стороны команды и запроса разделенными? Или есть другие решения для этого?
Спасибо
CreateLightCmd
. - person Razor   schedule 29.11.2018lightId
. Таким образом, по крайней мере стороны Command и Query разделены. - person Razor   schedule 29.11.2018TurnLightOn
сCreateLight
? - person guillaume31   schedule 30.11.2018