Как мне использовать streamId в EventStore?

В EventStore Дж. Оливера, как я должен использовать streamId при открытии потока?

Должен ли я иметь новый поток/идентификатор потока для каждого объекта/совокупного корневого объекта?

Итак, должны ли мои объекты состояния заказа, которые, как я думаю, должны быть объектами ar, каждый из которых имеет streamid?


person CodingHero    schedule 01.02.2012    source источник


Ответы (1)


StreamId — это ваш совокупный корневой идентификатор. Вероятно, вы захотите включить его в свои команды. Поскольку они являются направляющими, вы можете установить их перед отправкой команды от клиента, что означает, что вы можете действовать с одним и тем же AR без необходимости загружать его из модели чтения.

Вот пример использования проекта CommonDomain:

class CreateOrder {
    public Guid OrderId;
    ... 
}

class CreateOrderHandler {
    void Handle(command) {
        var order = Order.Create(command.OrderId);
        // This is using the Id property from AggregateBase in CommonDomain
        repository.Save(order, Guid.NewGuid(), null);
    }
}
person Mikael Östberg    schedule 01.02.2012
comment
Но должен ли я иметь совокупный корневой идентификатор для каждого объекта заказа? Таким образом, система будет иметь много-много совокупных корней. - person CodingHero; 01.02.2012
comment
Если вы идентифицировали Order как совокупный корень, каждый экземпляр Order должен иметь свой собственный идентификатор. Я не знаю о вашей системе, но Order, вероятно, является AR. Подумайте, как бы вы поступили в реляционной системе. Тогда у вас будет уникальный идентификатор для каждого заказа, и это та же концепция. Совокупный корневой идентификатор — это уникальный идентификатор экземпляра заказа. - person Mikael Östberg; 01.02.2012