Я скажу, что это просто выходит за рамки DDD.
То, что у вас есть с DDD, это совокупность событий, которые дают полезную модель. Однако взаимосвязь данных между такими моделями не всегда возможна.
Какую модель согласованности вы используете?
Если вы можете зафиксировать несколько событий в транзакции ACID, вы можете гарантировать, что изменения в группе агрегатов происходят атомарно.
Если вы используете модель возможной согласованности, вы, возможно, не сможете на самом деле проверить эти вещи позже. И когда вы это сделаете, вам может потребоваться компенсировать вещи, которые предположительно произошли, но больше не действительны.
Уникальность должна решаться в контексте. Если ваша модель небольшая (в тысячах), вы можете иметь совокупность, представляющую набор значений, которые вы хотите быть уникальными. Предполагается, что групповая совокупная транзакция возможна.
Если нет, то вы просто проецируете свою модель на базу данных, которая поддерживает ограничение уникальности. Если эта проекция не удалась, вы должны вернуться к своей совокупности и каким-то образом пометить ее как недействительную. Все время нужно учитывать неудачу. Вот где может пригодиться распределенный длительный процесс, такой как шаблон саги, но также требующий, чтобы вы думали о дополнительных вещах.
Таким образом, если вы не можете использовать модель хранения с гарантией непротиворечивости, все становится много более сложным. Тем не менее, есть хорошие, хорошо проработанные шаблоны для управления сбоями в распределенной среде, но это немного переворачивает проблему, потому что теперь вам нужно учитывать сбой на каждом этапе пути, что хорошо, но это потребует больших временных затрат.