私はDDDで初めての試みをしています。私は集合設計に問題があります。DDD - 小さな集約ルートを持つ不変条件を適用する
私のアプリケーションには3つのエンティティが含まれています。グラフ、ノード、リンク。これらのエンティティのそれぞれは、ユーザーが変更できるnameプロパティを持っています(これは、 'name'をEntity IDとして不適切と考えています)。グラフにはノードの集合が含まれ、ノードには発信リンクの集合があります(この問題の目的のために、着信リンクを無視することは安全です)。各ノードは一度に1つのグラフにのみ関連付けることができます(ただし、グラフ間で移動することができます)。同様に、各リンクは、任意の時点で(ただし移動することができます)、1つのノードに関連付けることができます。
私が強制しようとしている不変な点は、すべてのエンティティ名が親コレクション内で一意であることです。上で説明したアーキテクチャでは、不変式が実際のコレクションにあるので、コレクションの所有者(グラフとノード)が両方とも集計ルートでなければならないと決めました。
私の問題は、ノード上で名前を不変にする方法です。リンク上では、ノードAR内に隠れているので簡単であり、ノードはすべてのリンクの名前変更/移動がこの不変条件を破らないことを確認することができる。しかし、私が見る限りでは、不変量を破る可能性のあるNodeの直接的な名前変更を防ぐことは何もありません。最終的な一貫性はここでは許容できるオプションではありませんが、これは真のシステム不変量でなければなりません。
私が考えているアプローチは、Node.Rename()が実際に不変式を強制することですが、私の懸念は、名前変更が有効かどうかを確認するために親グラフを調べることです。これは正しく感じられません - グラフはこの名前空間制約を強制するものでなければならず、Nodeはそれについて何も知りません。
私はこれが意味をなされることを望み、人々の考えを聞くのを楽しみにしています。
編集:上記のドメインモデルは、ドメイン全体の単純化されたサブセットです。すべてのエンティティが単一のAR内に保持されるには複雑すぎる.......
"グラフはこの名前空間制約を強制するものでなければならず、Nodeはそれについて何も知りません。 - ビンゴ! – MattDavey
@MattDavey - あなたはARだけをGraphにするべきですか?どのようにして、すべてのノードの名前変更が親のグラフを経由しなければならないかを私が強制することはできません。このような場合には、[Vaughan essay](http://dddcommunity.org/wp-content/uploads/files/pdf_articles)の最初の試行と同様に、私は1つの巨大な「神」ARで終わることを心配しています。 /Vernon_2011_1.pdf) – tonyj444
もしそれが本当のシステム不変式ならば、 'Graph'を一つのARとして維持するのが道に思えます。唯一のARとして 'Graph'を使用すれば、どれくらい大きくなるのでしょうか、並行性はどれくらいですか? – JefClaes