Сравнение обновлений Axon Framework и JPA-таблиц - PullRequest
1 голос
/ 19 апреля 2020

Я новичок в структуре аксонов. Я изучал теорию паттерна CQRS. Я понял, что CUD хранится отдельно от операций чтения, и они оба представляют собой 2 разных сервиса. Я предполагал, что у меня будет 2 базы данных с одинаковыми таблицами и отношением (CUD будет иметь неиндексированную таблицу, read будет иметь полностью проиндексированные таблицы), которые необходимо синхронизировать. Теперь я начал смотреть на реализацию командной части CQRS стал кошмаром, чтобы понять полностью. Я запустил несколько примеров и увидел, что созданные таблицы БД совершенно разные. Если кто-то сталкивался с такой же ситуацией, не могли бы вы объяснить простыми словами, как она отличается в структуре аксонов в отношении моего понимания

1 Ответ

3 голосов
/ 20 апреля 2020

CQRS требует наличия двух отдельных моделей, модели команд и модели запросов, в одной «сфере приложения» / контексте, поэтому вы будете

То, как обе модели представлены с точки зрения хранилища, полностью зависит от деталей реализации, в то время как вы полагаете, что вы будете использовать обычные СУБД с / без индексированных таблиц.

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

Хранение модели команд: Вы можете выбрать сохранение модели команд. как есть или через Event Sourcing. Таким образом, первое решение, которое Аксон предпочитает называть «подходом с сохранением состояния», означает, что у вас будет относительно простой формат сущности модели команд. С другой стороны, решение Event Sourcing обеспечивает использование хранилища событий. После извлечения из Командной модели Repository будет создан пустой экземпляр Командной модели, и все события, которые опубликовал , будут воспроизведены для пустой версии. Это эффективно воссоздает командную модель каждый раз, когда вы ее извлекаете.

Хранение модели запроса: Как вы могли заметить, Axon здесь вообще не делает выбор. Пользователь сам решает, какой механизм хранения он использует.

Синхронизация модели: Как упоминалось ранее, существует несколько возможных вариантов. Опция, выбранная Аксоном, - это архитектура, управляемая событиями. Таким образом, командная модель получает команду (запрос о намерении выполнить некоторую операцию) и принимает решение по запросу. Как результат, событие будет опубликовано, эффективно «актуализируя» решение. Затем это событие распространяется асинхронно каждому заинтересованному компоненту. Эти «компоненты» являются, например, классами, обновляющими модели запросов, которые вы получили в своем приложении.

Надеюсь, что это справедливо для вопросов, которые у вас могут возникнуть, Даршу!

...