2011-09-08 8 views
2

私は過去に開発された様々な アプリケーションにDDDを適用しようとする分析麻痺のボルテックスに悩まされています。集計根を決定するのに役立つ

たとえば、単純なソフトボールのリーグがあります。我々はリーグ( )がリーグ(ただ1つ)に属しているチームと、1つのチームに所属する選手を持っています。私は を知っていますが、これらのルールはさまざまですが、ちょうどふるまうことができます。

私はこのリーグずに、あなたは、あなたがそれ(だけでなく、選手)に属するすべてのチームを削除 リーグを削除する場合に存在することはできませんチームで見る方法ので、私は、ルートされた状態で、ここで 1つの集約を持っていますリーグ。現在のチームも重要な意味を持っています。つまり、チームは独自の集約ルートになることもできますか? evans は、集約ルートを削除すると、すべての内部も同様に削除されると述べています( )。これにより、親リーグのないチームが残ります。

誰かが少し光を当てることができたら、私はとても感謝しています。

おかげで

答えて

1

あなたはquestion少なくともthreetimes非常によく似て求めてきました。ドメインは常に同じです:スポーツチーム、リーグ、選手ですが、あなたが提供する詳細は常に異なっており、これが異なる回答を得て受け入れる理由です。あなたは分析の麻痺の状態ではっきりと。あなたが完璧なモデルを最初に思い付く可能性はほとんどありません。コードとテストの作成を開始するとすぐにフィードバックが得られます。コードの臭い、リファクタリングを探し、より良いモデルが登場するでしょう。

このバージョンの質問について。集計definition

データ変更の ためにユニットとして扱われる関連オブジェクトのクラスタ。外部参照は、ルートとして指定された1つの 集約のメンバーに制限されています。整合性のセット のルールが集約の境界内に適用されます。

そして、古典的な例は、受注集計の一部である集計ルートと受注明細としての受注明細です。オーダーラインは、オーダーの外で意味をなさないことに注意してください。

"チームはリーグなしでは存在できません"というルールは異なります。チームがLeague Aggregateに加わることを宣言するだけでは不十分です。 「注文は顧客なしでは存在できません」と同様です。お客様が注文集計の一部であることを意味するものではありません。顧客は独自の集約であり、それは意味をなさない。チーム自体が意味をなさないように、それ自身の歴史やファンなどを持っています。

この問題は、「データ交換」スタンドポイントからもアプローチできます。エヴァンの例では、Order全体がロックされ、内部の不変量を強制することができます。あなたがリーグを変更した場合は、すべてのチームとプレーヤーも同様にロックされますか?

今回、あなたが提供した情報に基づいて、リーグとチームの2つの集計が必要です。集約はお互いを参照できることに注意してください。

+0

ありがとうございました。あなたのアドバイスを受けて、コーディングとテストを開始します。そのちょうど私が読むほど混乱します。たとえば、私はクラスのアプローチで値のオブジェクトにする必要があります順序の行を読んだ!それはちょうど私の心を吹いた。 – Marco

関連する問題