Как осуществить перевод средств между банковскими счетами в стиле DDD с помощью EventStore? - PullRequest
0 голосов
/ 03 марта 2019

У нас есть аккаунт A и аккаунт B. Мы хотим перевести средства / деньги между A и B. Предположим, у нас есть общий корень для аккаунта.Согласно книге Эрика Эвана, нам понадобится доменная служба для обработки логики передачи.Для обеспечения согласованности нам потребуется изменить учетную запись A и учетную запись B в одной транзакции.Можно ли записывать в два разных потока (учетная запись A и B) в одной транзакции с помощью EventStore?

1 Ответ

0 голосов
/ 03 марта 2019

Можно ли выполнять запись в два разных потока (учетная запись A и учетная запись B) в одной транзакции с использованием EventStore?

Начиная с V5 RC1 (декабрь 2018 г.), я не могу найти никаких доказательств того, что Event Store поддерживает скоординированную запись в несколько потоков событий.

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

Аналогия: рассмотрите банковский перевод - вы думаете, что мы переедемденьги со счета в Bank of America на счет в Wells Fargo в одной транзакции?

Более обычным подходом было бы управление процессом перевода в отдельном потоке, который отслеживает всеэто случилось.Изменения в учетных записях по-прежнему происходят в их собственных потоках, изолированно друг от друга.Поток процесса отвечает за оркестровку - проверку подтверждений от других элементов.

Счастливый путь потока может выглядеть примерно так:

  1. Запишите запрос на передачу вПоток процесса
  2. Запись снятия средств со счета. Поток
  3. Запись подтверждения вывода средств в потоке процесса.
  4. Запись пополнения счета.в потоке счета B
  5. Запись подтверждения депонирования средств в потоке процесса
    • Запись завершения процесса в потоке процесса

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

...