Воссоздать график, который изменяется во времени - PullRequest
0 голосов
/ 09 марта 2011

В моем домене есть объект, представляющий городскую электрическую сеть. На самом деле моя модель - это объект со списком, который содержит прерыватели, трансформаторы, линии.

Сеть меняется каждый раз, когда выключатель открывается / закрывается, пользователь может менять соединения и т. Д ...

Во всех примерах CQRS EventStore запрашивается с помощью Version и aggregateId.

Как вы думаете, мне нужно реализовывать события только для «сетевого» агрегата или также для каждого «подключаемого» элемента?

В этом случае, когда мне нужно воспроизвести все события, чтобы получить «фактический» статус (на основе даты), я могу обработать около 10000-20000 событий.

Событие изменяет одно свойство или мне нужно Событие, которое изменяет объект (содержащий все свойства объекта)?

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Я предполагаю, что вы имеете в виду, что ваши "подключаемые элементы" являются частью совокупности "сети", и вы спрашиваете, должны ли они быть их собственной совокупностью? Это действительно зависит от природы вашей системы и проблемы и является скорее проблемой DDD, чем простой проблемой CQRS. Однако, если характер ваших изменений обычно заключается в том, что они работают с элементами независимо друг от друга, тогда, вероятно, должны быть сами агрегированные корни. Независимо от того, чтобы ответить на этот вопрос, нам нужно знать гораздо больше о моделируемой вами системе.

Что касается задачи воспроизведения тысяч событий, вам, конечно, не обязательно воспроизводить все свои события для каждой команды. Конечно, снимок является опцией, но еще лучше, если кэшировать совокупные корневые объекты в памяти после их первой загрузки, чтобы гарантировать, что вам не придется извлекать события из каждой команды (за исключением случаев сбоя системы, В этом случае вы можете использовать моментальные снимки для более быстрого восстановления, хотя они могут и не понадобиться при кэшировании, поскольку вы платите только один раз за загрузку).

Теперь, если вы распределяете эту систему по нескольким хостам или потокам, есть некоторые другие вопросы, которые следует рассмотреть, но я думаю, что обсуждение лучше оставить для другого вопроса или форумов.

Наконец, вы спросили (я думаю), может ли событие изменить более одного свойства состояния объекта? Да, если это то, что имеет смысл, основываясь на том, что представляет это событие. Идея события заключается просто в том, что оно представляет изменение состояния в совокупности, однако эти события должны также представлять концепции, которые имеют смысл для бизнеса.

Надеюсь, это поможет.

1 голос
/ 10 марта 2011

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

http://thinkbeforecoding.com/post/2010/02/25/Event-Sourcing-and-CQRS-Snapshots

...