5

エンティティのリストを持つCity集計があります。PointOfInterestこの後者のエンティティは、ここでは説明しない理由により、City 集計内に論理的に存在します。集約ルートである City を除いて、PointOfInterest へのリンクを保持するエンティティはありません。

idただし、(主に SEO の理由で) その URLに PointOfInterest しかない、City ページから参照できる PointOfInterest の Web ページがあります。

したがって、コントローラーから、CityRepository に PointOfInterest などを直接クエリすると便利CityRepository.findPointOfInterestById()です。

もう 1 つのオプションは、 を照会してから を実行することCityRepository.findCityByPointOfInterestId()ですCity.findPointOfInterestById()が、この場合は少し面倒に見えます。

最初のアプローチに何か問題がありますか?

4

1 に答える 1

5

PointOfInterest は City 集約の一部であるため、PointOfInterests へのすべての参照は City のトラバーサルによって取得する必要があることを受け入れる必要があります。CityRepository が GetPoI() メソッドを公開することは適切ではないようです。これは、外部オブジェクトが PoI への直接参照を取得できるようになり、集約の目的全体が無効になるためです。さらに、PoI を処理することは CityRepository の当然の責任とは思えません。

Wouter が指摘しているように、このような複雑なことを行う必要があると感じているのは、現在の設計が適切ではないことを示している可能性があります。PointOfInterest がアプリケーションの主要なエンティティの 1 つであることが判明し、ユーザーが最初に City を通過する必要なくナビゲーションの開始からすぐにアクセスできる場合、PoI に独自の集計を与えることを検討してみませんか? PoI / PoIType の関係に関しては、PoI が PoIType を持つ方が、その逆よりも論理的に思えます。

于 2012-08-07T13:07:06.597 に答える