DDD を初めて試みたのですが、集約設計で問題が発生しました。
私のアプリケーションには 3 つのエンティティが含まれています。グラフ、ノード、リンク。これらの各エンティティには、ユーザーが変更できる name プロパティがあります (これにより、'name' はエンティティ ID として不適切になると思います)。グラフにはノードのコレクションが含まれ、ノードには発信リンクのコレクションがあります (この問題の目的のために、着信リンクを無視しても問題ありません)。各ノードは、一度に 1 つのグラフにのみ関連付けることができます (ただし、グラフ間で移動できます)。同様に、各リンクは、任意の時点で 1 つのノードにのみ関連付けることができます (ただし、移動することはできます)。
私が強制しようとしている不変条件は、すべてのエンティティ名が親コレクション内で一意であることです。上記のアーキテクチャでは、不変条件は実際のコレクションにあるため、コレクションの所有者 (グラフとノード) は両方とも集約ルートにする必要があると判断しました。
私が抱えている問題は、ノードで名前の不変をどのように強制するかということです? リンクでは、ノード AR 内に隠されているため簡単です。そのため、ノードはすべてのリンクの名前変更/移動がこの不変条件を破らないことを確認できます。しかし、私が見る限り、不変条件を壊す可能性のある Node の直接の名前変更を妨げるものは何もありません。ここでは結果整合性は受け入れられるオプションではありません。これは真のシステム不変条件でなければなりません。
私が検討しているアプローチは、Node.Rename() に実際に不変条件を適用させることですが、私の懸念は、これには親グラフ内を調べて、名前の変更が有効かどうかを確認することです。これは正しく「感じられない」 - グラフがこの名前空間の制約を強制するものであるべきであり、その Node はそれについて何も知らなくてもよいように感じます。
これが理にかなっていることを願っており、人々の考えを聞くことを楽しみにしています.
編集: 上記のドメイン モデルは、ドメイン全体の単純化されたサブセットです。すべてのエンティティを 1 つの AR 内に保持するには複雑すぎます........