Использование существующей базы данных или ее преобразованной версии в качестве начала вашей настойчивости на стороне чтения никогда не является хорошей идеей. Ваша система, основанная на событиях, должна быть запущена, поэтому вы получаете одно из главных преимуществ источников событий - возможность создавать прогнозы по требованию, используя постоянство полиглота.
Использование команд для миграции также не хорошая идея по простой причине, что команды, по определению, могут потерпеть неудачу из-за проверки инвариантного управления до или после условия. Это также не передает значение миграции, которая должна представлять текущее состояние системы, как оно есть сейчас. Помните, что текущее пребывание в системе - это не то, что вы можете принять или отрицать. Это дано вам, и ваша задача - захватить его.
Лучшая практика для такой миграции - генерировать так называемые события миграции, такие как EntityXMigratedFromLegacy
. Конечно, работа может быть существенной. Главным образом потому, что устаревшая модель системы, скорее всего, не будет соответствовать новой модели, в противном случае причина такой миграции не совсем ясна.
Используя события миграции, вы в явной форме заявляете, что часть состояния была перемещена из другого места, как есть. Вы всегда будете знать, как перенесенный объект начал свой жизненный цикл в новой системе - либо путем миграции из прежней версии, либо путем инициализации в новой системе.