Наше приложение отправляет/получает много данных в/из стороннего сайта, с которым мы работаем.
Наша доменная модель в основном заполнена этими данными.Внешний идентификатор как идентификатор домена
«Проблема» у нас есть идентификация «хорошего» кандидата как идентификатор домена для совокупности.
Похоже, у нас есть 3 варианта:
- Генерировать идентичность домена (
UUID
илиDB-sequence
...); - Используйте внешний ID как идентификатор домена, который поставляется вместе со всеми данными из внешнего источника.
- Используйте идентификатор внутреннего домена И внешний ID как отдельный идентификатор, который «может» использоваться для операций поиска; внутренний идентификатор всегда ведущий
О Внешнем-ID:
- Это 100% гарантируется ID будет не изменится
- Идентификатор всегда удался самой внешнего источник
- Другие домены в нашей системе могут использовать ext ernal-идентификатор для поисковых операций
Особенно последний пункт выше убедили нас в том, что внешний-идентификатор не является инфраструктурной проблемой, но на самом деле принадлежит к домену.
Какой вариант выбрать?
** UPDATE **
Может быть, я не ясно, о термине '3th партии'.
Фактически внешний источник - это наш клиент, который активно работает в автомобильной промышленности.
Наше приложение использует основные данные клиента для выполнения нескольких «вещей». У нас есть несколько Локальности контексты (BC), как 'Управление клиентами', 'Survey', 'Назначение', 'Техническое обслуживание' т.д.
Наш клиент посылает нам 'Задачи', которые описывают что-то нуждается в этом. Это «что-то» может быть:
- «пусть клиент X полный обзор Y»
- «график/отменить назначение для клиента X»
- «автомобиль X для клиента Y запланирован на обслуживание в позиции XYZ '
Эти «Задачи» всегда имеют «идентификатор задачи», который гарантированно будет уникальным. Мы сохраняем все входящие «Задачи» в нашей базе данных (активный стиль записи). Все возможные действия над задачей сопоставляются с событием домена. (Несколько BC могут быть заинтересованы в одной и той же задаче)
Каждый BC содержит одно или несколько агрегатов, которые распределяют некоторые события домена другим BC. Например, когда назначение отменяется, происходит событие домена, обслуживание прослушивает это событие, чтобы выполнить некоторые действия.
Однако наш клиент ожидает сообщения после каждого действия, связанного с Задачей. Поэтому нам всегда нужно использовать «идентификатор задачи».
Суммируя вещи:
- Задачи имеет целевой идентификатор
- Задачи может быть связана с несколько BCs
- Каждого BC посылает некоторое «результат сообщение» клиент с соответствующим целевым идентификатором
- задачи идентификаторы распределены по событиям домена
- Мы продолжаем каждый (внутренне) сохранялся задача уточненного
Надеюсь, я был достаточно ясен об использовании внешнего id (= task-id) и наших различных BC.