Магазин событий без CQRS

Я много видел про EventStores, но все статьи связаны с рассказами о CQRS.

Мы хотим использовать EventStore для интеграции ограниченных контекстов, но хотим придерживаться традиционной ORM для чтения/записи агрегатов, чтобы избежать команды/запроса и отдельной модели чтения, которые в нашем случае усложнили бы работу.

Увидев, что так популярно говорить об обеих концепциях вместе, можно подумать, что они предназначены для совместной жизни - есть ли подводные камни при создании «облегченного» EventStore без CQRS по сравнению с реализацией EventStore для агрегатов / CQRS / модель чтения?


person morleyc    schedule 27.03.2013    source источник
comment
Чтобы использовать подход с хранилищем событий, вам как бы нужна система, в которой все операции изменения данных вызываются командой и приводят к событию (которое затем можно сохранить и воспроизвести). Это вполне естественно для среды CQRS, но я не вижу причин, по которым вы не могли бы создать такую ​​систему самостоятельно — просто требуется дисциплина, чтобы обрабатывать все изменения данных с помощью команд и запускать события, чтобы сообщать о том, что происходит. случилось.   -  person marc_s    schedule 27.03.2013


Ответы (2)


Перейдите к NoSql Distilled — вы сэкономите много времени, ничего не делая в течение нескольких дней, но читать его и рисовать то, что вы после. Если вы «читаете/записываете агрегаты», вам следует рассматривать базы данных, такие как RavenDB, которые специализируются на этом.

Обратите внимание, что тег event-store предназначен для магазина событий JOliver и имеет ключевые архитектурные понятия.

У вас также есть вещи немного обратные, чтобы добраться до создания событий, ваш домен построен определенным образом, чтобы облегчить это. Ключевые вещи, которые контрастируют с тем, как вы формулируете вещи в своем вопросе (перефразируя плохо и / или несправедливо: я хочу использовать хранилище событий только для хранения событий - все остальное я могу сделать сам)

  1. события группируются по агрегату - его реальной единице управления событиями

  2. отправка на что-л.

Изучите решения для управления очередями, если вам не нужна модель предметной области, основанная на событиях. Это очень законная вещь — просто не притворяйтесь, что Event Store — это обобщенная подочередь паба событий.

Иметь проект Dispatcher для денормализаторов, которые строят модель чтения, очень просто — вы можете использовать все виды экзотических вещей, но использование знакомого инструмента, такого как SQL SB, с простым уровнем базы данных, таким как PetaPoco, подойдет.

Вы действительно сделали всплеск с CommonDomain и EventStore? Вы читали документ readme в nuget? Вы смотрели видео 2 JOliver?

person Ruben Bartelink    schedule 27.03.2013
comment
Рубен, спасибо за ценный ответ, я нашел одно видео vimeo.com/31153808 не могли бы вы связать меня с другим ( вы упомянули, что их было 2) - не могу найти другого! - person morleyc; 30.03.2013
comment
@ g18c отредактировано. IIRC тот, который вы нашли, является лучшим синглом, но другие, безусловно, заслуживают внимания. - person Ruben Bartelink; 31.03.2013
comment
Спасибо за эти ссылки - да, видео отличное и действительно помогло мне понять. Поскольку joliver написал код таким методичным образом, реализовать команды и обработчики не составит большого труда, так как это, вероятно, сэкономит мне много времени при отображении ORM. Я сделал быструю демонстрацию (с ней возникла небольшая проблема) -null" title="почему мое поле строки события команды извлекается как null"> stackoverflow.com/questions/15723640/, но до сих пор очень впечатлен этой библиотекой - person morleyc; 31.03.2013

Мы хотим использовать EventStore для интеграции ограниченных контекстов.

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

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

Кроме того, вы все равно можете получить некоторые преимущества CQRS, просто используя отдельный read-model для запросов, а не вашей поведенческой модели.

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

person eulerfx    schedule 27.03.2013