Position
「Article」境界コンテキストのユビキタス言語で意味のある概念である場合、「Article」境界コンテキストPosition
の ValueObject または Entity である必要があります。
Contact
それが「記事」の境界付けられたコンテキストでは意味のある概念であるが、「ディレクトリ」の境界付けられたコンテキストと何らかの形で関連付ける必要があると言っている場合はPosition
、その関連付けの目的は何かを考える必要があります。
- で連絡先を作成する前に、ポジションが存在することを確認する必要があり
JobArticle
ますか?
Position
と の間で同期が保たれる共有データはありContact
ますか?
- ポジションがアーカイブ/削除された場合、またはその他の方法で使用できなくなった場合はどうなりますか? すべての連絡先に対して何かを行う必要がありますか?
関連付けられた連絡先を作成する前にa が存在することを確認する必要がある場合Position
、記事コンテキストの責任において暗黙的に位置が役割を果たすため、記事コンテキストで新しいPosition
エンティティを作成して同期を維持したくなるでしょう。
PositionCorrelation
どちらの方法でも、Article コンテキスト内の何かを Directory コンテキスト内の対応するエンティティと関連付けるには、次の2 つのプロパティを持つ「Article」コンテキストで ValueObject を作成できます。
- CompanyId (グローバルに一意)
- PositionId (社内でローカルに一意)
集計は他の集計ルートのみを参照する必要があるというルールは、集計内のエンティティを識別するための情報も提供できないという意味ではありません。これは、他のエンティティとやり取りしたい場合は、集約ルートを介して行う必要があることを意味します。つまり、少なくとも集約ルート ID が必要です。次に、ローカル Id を使用して会社にそのポジションの 1 つに対して何かを行うように依頼する場合、それは問題ありません。
ただし、このアプローチに従うと、「記事」の境界付けられたコンテキストに「位置」という用語が導入されることに注意してください。これにより、「記事」のコンテキストで「位置」という単語が別の何かを意味する場合、名前の衝突が発生する可能性があります。おそらく、記事内の位置 (段落番号など) を意味します。この場合、クロスコンテキスト識別子を何と呼ぶかを慎重に検討する必要があります。
1 つのアプローチとしてPosition
、 と 1 対 1 のマップがある場合Contact
、2 つのプロパティを次のようにすることができます。
- 会社ID
- 会社の連絡先 ID
また、コンテキスト間の統合時に Anti-Corruption Layer (ACL) で同期を維持する場合は、CompanyContactId と PositionId (Company 内のローカル) の値を同義として定義します。これにより、各 UL の内部的な一貫性が維持され、ACL で 2 つの間の相関が定義されます。