Интеграция репозитория Axon и Spring - PullRequest
1 голос
/ 27 мая 2020

Я прочитал документацию Axon и просмотрел все предоставленные образцы проектов, особенно AxonBank , на который я ссылаюсь здесь, но одна вещь все еще беспокоит меня и, насколько я понимаю, не объясняется :

Насколько я понимаю, в Axon вы выполняете запросы к базе данных чтения, которая представляет материализованное представление, например H2, который содержит последнюю BankAccount сущность JPA ( здесь ). Однако, если у вас есть репозиторий Spring, например JpaRepository<BankAccount, Long> ( здесь ), у вас также есть метод save, который следует использовать только для команд. Разве вы не должны разделить репозиторий на репозиторий только для чтения и только для записи?

Может ли кто-нибудь также указать мне документацию, как Axon работает с этим репозиторием? Потому что для унифицированного разработчика это выглядит как «нормальный» репозиторий JPA, то есть объект кажется изменяемым и всегда актуальным. создается путем применения всех событий, происходит ли это в фоновом режиме с Axon?

Что произойдет, если я обновлю объект с помощью JpaRepository#save, но не агрегат? Будут ли они рассинхронизированы? c?

Похоже, что у нас есть два источника истины в этом случае, чего не должно быть теоретически.

1 Ответ

1 голос
/ 27 мая 2020

позвольте мне попытаться вам помочь!

То, что вы описываете, - это шаблон CQRS - особенно сторона запросов! Репозиторий, который вы упомянули, обычно используется на @EventHandler s для построения ваших прогнозов, которые будут хранить данные так, как вам нужно!

Глядя на AxonBank, он должен быть четко виден здесь .

Я не думаю, что в документации Axon есть что-то конкретное c об этом, но на самом деле это обычный репозиторий JPA. Конечно, вы можете использовать все, что захотите, в качестве стороны запроса.

Что произойдет, если я обновлю объект с помощью JpaRepository#save, но не агрегат? Будут ли они рассинхронизированы? c?

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

Кажется, у нас есть два источника истины в этом случае, которые не должны быть случай теоретически.

Что касается вашего вопроса об источнике истины, ваши События всегда должны быть источником истины. В конце концов, вы не должны обновлять репозиторий, кроме как с помощью @EventHandler s.

...