Сохранение шагов и артефактов процесса при выполнении DDD с EF - PullRequest
0 голосов
/ 08 октября 2018

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

У нас есть требование записывать каждый этап и, необязательно, артефакты (двоичные файлы), генерируемые на каждом этапе, в конечном итоге, чтобы помочь конечным пользователям иподдержка для диагностики проблем.

Мы следовали подходу DDD для остальной части приложения, и это был путь, но я не согласен с подходом к этому требованию.

Мой первоначальный подходдля каждого запроса пользователя генерировать PowerPoint для DocumentRequest, который будет объединенным корнем.У меня вопрос, как представить шаги и связанные с ними артефакты.Затем создайте отдельный агрегат для шагов, так как я не вижу ни одного инварианта, который должен был бы применяться через запрос.DocumentRequest не будет иметь коллекцию шагов.У каждого шага есть внешний ключ к запросу.

Сходство шкафа, о котором я могу подумать, это то, как VSTS представляет релиз или сборку.Каждая сборка / выпуск состоит из этапов, каждый из которых имеет возможность загружать артефакты или детализацию в текстовый журнал.

1 Ответ

0 голосов
/ 10 октября 2018

Не эксперт в DDD, но я согласен - DocumentRequest тоже не выглядит для меня хорошим агрегированным корнем.Я задаю себе вопрос - можно ли определить DocumentRequest, не зная этапов, через которые прошел процесс генерации?Для меня это, конечно, может.Можно ли это определить без Result поколения?Опять же, это возможно.

Похоже, сам процесс очень важен - вы хотели бы иметь возможность просматривать артефакты для разных этапов.Поэтому я хотел бы сделать DocumentGenerationProcess (или использовать лучший термин, если вы его найдете) в качестве совокупного корня.Это будет иметь шаги с артефактами, на которые ссылается каждый шаг, и, возможно, конечный результат (слайд PowerPoint).

Другой способ, которым вы могли бы смоделировать это - иметь DocumentGenerationProcessResult в качестве совокупного корня.Обычно он будет содержать сгенерированный документ (если результат будет успешным).DocumentGenerationProcessResult будет иметь ссылку на GenerationProcess с шагами / артефактами, если пользователи захотят углубиться в детали.

...