•オブジェクト参照(集約ルートとその内部エンティティ間の関係は、ルートで定義されたメソッドを介して表現することもできます-> )またはデータベースから関連エンティティを取得するリポジトリを介して、2つのエンティティ間の関連付けを表現できます。 。
•関係がリポジトリを介して表現される場合、クライアントはリポジトリを直接呼び出して関連エンティティを取得します。•関係
を表現する方法の決定は、この関係かどうかに基づいています。SomeRootEnt.BorrowMeIntEnt(...)
完全性を維持するために必要です(そしておそらく行動がそれ自体を表現できるようにするために関連付けを必要とするかどうかについて)
1)関係(たとえば1:* )がリポジトリを介して表現されている場合、子エンティティには親エンティティのIDが含まれている必要があります(注:この質問は、少なくとも親がルートであるか、すべてが同じ内部に存在することを前提としています集計 )?
2)異なる集合体のエンティティ間の関係は、 IDでのみ表現する必要があります
a)なぜですか?
b)そのような関係は本質的にリポジトリを介して表現されませんか?
c) b)に「はい」の場合、これは、特定の動作をサポートする目的で、ほとんどの場合、異なる集合体のエンティティ間の関連付けが必要ないことも示唆しますか?はいの場合、なぜですか?
アップデート:
2a)
ID参照との関係を表現することは、オブジェクト参照との関係を表現することとは異なります。関係をIDで表現する必要がある理由は、トランザクションの整合性を維持するためです。つまり、特定のトランザクションで変更されるのは1つの集計のみです。オブジェクト参照が使用された場合、2つの集計がトランザクションの影響を受ける可能性があります。
I-関係がオブジェクト参照で表現される場合、アグリゲートA1(変更されている)が別のアグリゲートA2に「物理的に」接続されているという事実のために、あなたが言いたいことを理解しています。A1のパーツの1つ(つまり、A2 <-実際にはA2は実際にはA1の一部ではありませんが、ポイントを理解しているといいのですが)は他のパーツと同期していませんか?!
II-しかし、概念的には、A1を変更すると、2つの関係がオブジェクト参照を使用して表現されていなくても、2つの集合体は同期していないため、実際には、A1とA2の違いはどのようになりますか?物理的に接続されていますか?
III-とにかく、どちらの場合でも、結果整合性を使用できないのはなぜですか?
2回目の更新:
original_2)
明確にするために、ルートエンティティ(AR)間の関係はIDで表現する必要があります。個別の集合体の非ルートエンティティ間の参照は禁止する必要があります。
A1非ルートエンティティ からA2ルートエンティティにのみトラバース可能な単方向の関連付けを作成できますか(つまり、A1の非ルートエンティティにはA2ルートのIDが含まれます)。
2)a)
私。
オブジェクト参照が使用された場合、2つの集計がトランザクションの影響を受ける可能性があります。
A1を変更しているトランザクションでA2が変更される可能性があります。IDでA2を参照すると、この可能性が排除されます。また、A1をロードする場合、データベースのロックなどはA2には適用されません。
A1を更新するときにDBロックがA2に適用されないという事実を少しの間無視します-特定の状況で、A1とA2の両方を単一のトランザクション内で変更できるようにすべきではないのはなぜですか?
アグリゲートが整合性の境界を定義することは知っていますが、まれにA1とA2の両方を同じトランザクション内で同期する必要がある場合は、A1とA2の両方を単一のアグリゲートに変換する以外の方法はありません。適切な?!
ありがとうございました