Id по-другому подходит к предлагаемым решениям.Я дважды выполнил эту миграцию для двух разных проектов.
Ваш первый шаг, когда команды выполняют запись и запросы на чтение, является хорошим первым шагом.
Следующее, что я хотел бы сделать, это поднятьсобытия из тех же команд, которые делают записи.Освоитесь при возникновении событий.
Это просто означает, что в обработчике команд просто создайте события и поместите их в EventStore.
Чем раньше в жизни проектов вы начинаете фиксировать события, тем большеистория, которая у вас есть в вашем приложении.
Теперь продолжайте выполнять запись в нормализованную базу данных в ваших обработчиках команд.
Как только у вас будет несколько обработчиков команд, вызывающих события, следующим шагом будетдовольно легко.Создайте обработчик / денормализатор событий, который прослушивает возбужденное событие и просто выполняет ТОЧНО ту же самую операцию записи, которую выполнял обработчик команд.
Все, что вы сделали сейчас, это переместили ответственность WRITE в денормализатор и удалили из обработчика команд.
Это в основном процесс, который я бы порекомендовал, как я уже говорил, я сделал это дважды, и он работает.
Вопрос переноса СУЩЕСТВУЮЩИХ данных в вашей базе данных на события немного сложен.Вы должны думать об этих данных как о текущем состоянии, поэтому все, что вы можете сделать, - это создать и зафиксировать (используя какую-то написанную вами утилиту). Создать события для всех данных в ваших системах.
Например, чтобы перенестиВ существующей таблице учетных записей вы должны написать AccountCreatedEvent и зафиксировать его со всеми данными каждой учетной записи в таблице.