私たちのアプリケーションは、私たちが扱っている第三者との間で多くのデータを送受信します。
ドメインモデルには、主にそのデータが入力されています。ドメインIDとしての外部ID
「問題」は、「良い」候補をドメインIDとして識別して集計することです。我々は3つのオプションがあるよう
に思える:
- がドメインアイデンティティ(
UUID
またはDB-sequence
を...)を生成します。 - 外部IDをドメインソースIDとして使用すると、外部ソースのすべてのデータが取得されます。
- 内部ドメインIDと外部IDを個別のIDとして使用します()。これは検索操作に使用される可能性があります。内部IDは、常に外部-IDについて
をリードしています:
- それは100%がIDが
- IDが外部でを常に管理さを変更することはありませんが保証されますソース
- 他のドメイン私たちのシステムは、ext上記ernal-ID検索操作のための
特に最後の点は、外部-idはインフラ心配はありませんが、実際にドメインに属していることを私たちに確信させました。
どのオプションを選択する必要がありますか?
** UPDATE **
たぶん私は、用語「第3回党について明確ではありませんでした。
実際、外部ソースは、自動車業界で活躍しているクライアントです。
私たちのアプリケーションは、クライアントのマスターデータを使用していくつかの「もの」を完成させます。私たちは、私たちのクライアントは、私たち何かを説明する「タスク」を送信し
など「メンテナンス」 、「クライアント管理」のような有界コンテキスト(BC)、いくつか、「調査」、「予定」を持っていますが必要です。
- クライアントYのための
- のスケジュール/クライアントXのために予約をキャンセル "
- 「車のX位置XYZでメンテナンスを予定している「クライアントXの完全な調査Yましょう」は「何か」のかもしれないと '
これらの「タスク」には、常に一意であることが保証された「タスクID」があります。 すべての着信「タスク」をデータベースに格納します(アクティブレコードスタイル)。タスクに対するすべての可能なアクションは、ドメイン・イベントを使用してマップされます。
すべてのBCには、ドメインイベントを他のBCに配布する1つまたは複数の集約が含まれています(複数のBCが同じタスクに関心を持つ可能性があります)。たとえば、予定が取り消されると、ドメインイベントがトリガされ、メンテナンスはそのイベントを聴いて何らかの処理を行います。
ただし、クライアントには、タスクに関連するすべてのアクションの後にいくつかのメッセージが表示されます。したがって、常に 'task-id'を使用する必要があります。
は、物事を要約すると:
- タスク
- タスクを複数のBC
- すべてのBCは、関連タスク-idを持つクライアントにいくつかの「結果メッセージ」を送るに関連するかもしれないタスクIDを持っています
- タスクIDは、ドメインのイベントで配布されている我々は、すべての(内部)タスクを持続し続ける
- 最新
うまくいけば、私はexternal-id(= task-id)と異なるBCの使用について十分に分かりました。