集約内のオブジェクトごとに個別のクラスを作成する必要がありますか?それとも、オブジェクトを単一の集約クラスのネストされたクラスにする必要がありますか?
3 に答える
これは、オブジェクトとそれに含まれるオブジェクトがどれだけ緊密に結合されているかによって異なります。Personクラスがあり、その人が0から多数の電話番号を持っている場合、多くの異なるタイプのオブジェクトが電話番号を持つ可能性があるため、通常はPhoneNumberを別のクラスにする必要があります(企業、学校など)。 )。ただし、オブジェクトが自然に緊密に結合されているものである場合、たとえば、PersonオブジェクトがToesを持つ可能性がある場合は、内部クラスが理にかなっている可能性があります。
自分自身に尋ねたいと思うかもしれないいくつかの質問は次のとおりです。1。集約されたオブジェクトは、含まれているクラスのプライベート部分へのアクセスを必要としますか?もしそうなら、内部クラスは良い賭けです。2.集約されたオブジェクトは常に正確に1つのオブジェクトに属し、それが属するオブジェクトは変更されませんか?そうでない場合は、おそらく内部クラスは必要ありません。3.集約されたオブジェクトは、集約されたオブジェクトのコンテキスト外で意味がありますか?もしそうなら、それはおそらく内部クラスであるべきではありません。
疑わしい場合は、通常、個別に定義されたクラスを使用することをお勧めします。他の理由がない場合は、結合が継続され、ソースファイルが小さくなります。
また、それは必ずしもどちらか-または問題ではないというわけではありません。いつでも個別のクラスまたはインターフェースを定義し、それを集約クラス内でサブクラス化/実装できます。
集約されたオブジェクトが分離可能である場合、つまり、それらが単独でも集約でも発生する可能性がある場合、オブジェクトごとに個別のクラスを持ち、型付きコレクションを使用して集約を表します。
UIなしで後者を使用できるため、MVCがドメイン集約と何をしなければならないかわかりません。
私は通常、集合体のパーツを個別のクラスにすることを好みます。これは、パーツがそれ自体でビジネス上の意味を持つ可能性があるためです。ネストされたクラスは、内部クラスの前に外部クラスをロードする必要がある場合、または内部クラスを公開できない場合に意味があります (少なくともこれらのことは Java に当てはまります)。