2015-04-16 2 views
1

У меня есть система, которая использует CQRS + ES. Мне нужно импортировать агрегаты из электронных таблиц, и мне было интересно, есть ли у кого-нибудь идеи о том, как лучше всего это сделать.Импорт таблиц в систему источников событий CQRS

Моя первоначальная мысль состояла в том, чтобы пройти через электронную таблицу и создать X команд типа «CreateNewAggregateCommand». Затем я мог запускать эти команды, и они будут действовать так, как если бы пользователь создал одну команду с использованием пользовательского интерфейса. Правильно ли это, или есть лучший способ?

Что делать, если важно, чтобы одна строка в электронной таблице не импортировалась, тогда весь файл должен быть отклонен. В последовательной системе, если одна строка в импорте не удалась, как бы вы справлялись с согласованностью? Вы бы выпустили какую-то компенсационную команду?

ответ

2

В случае, когда импорт или массовое обновление систем с источниками ресурсов обычно реализуются как специальные обработчики команд и возникают специальные события, такие как ImportFromSpreadsheet/ImportedFromSpreadsheet. Это позволяет легче отслеживать поведение, поэтому вы четко знаете, что эта строка была импортирована, а не вручную. Вы можете использовать регулярные события, если вы также сохраняете команды в хранилище событий для целей аудита.

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

0

Нам нужно быть прагматичным здесь, если вам нужно импортировать тысячи записей, вы не будете делать это один за другим. Вот что вам следует сделать, используя известный шаблон. Claim Check

Направьте свой файл на свой сервер, загрузите его в FTP-адрес или что-то в этом роде, а затем создайте простую команду для запуска процесса импорта. Используйте GUID в качестве имени файла, а в команде добавьте это имя файла, обработчик должен проверить, существует ли файл и начать обработку файла.

Надеюсь, что это поможет.

Смежные вопросы