5

我有一个City聚合,有一个PointOfInterest实体列表。后一个实体在逻辑上位于 City 聚合中,原因在此不作解释。除了聚合根 City 之外,没有任何实体拥有指向 PointOfInterest 的链接。

但是,我们有一个 PointOfInterest 网页,可从 City 页面浏览,该网页(主要出于 SEO 原因)id在其 URL 中仅包含 PointOfInterest。

因此,从控制器中,直接向 CityRepository 查询 PointOfInterest 会很方便,例如CityRepository.findPointOfInterestById().

另一种选择是查询CityRepository.findCityByPointOfInterestId(), then City.findPointOfInterestById(),在这种情况下看起来有点麻烦。

第一种方法有什么问题吗?

4

1 回答 1

5

由于 PointOfInterest 是 City 聚合的一部分,因此您必须接受对 PointOfInterests 的所有引用都必须通过遍历 City 来获得。CityRepository 公开 GetPoI() 方法似乎不合适,因为它允许外部对象直接引用 PoI,从而破坏了聚合的全部目的。此外,处理 PoI 似乎并不是 CityRepository 的自然责任。

正如 Wouter 所指出的,您觉得需要做这样复杂的事情可能表明当前的设计不太合适。如果 PointOfInterest 是您应用程序中的主要实体之一,并且如果用户可以从导航开始就可以访问它,而不必先经过一个城市,为什么不考虑给 PoI 自己的聚合呢?至于 PoI / PoIType 关系,PoI 拥有 PoIType 似乎比其他方式更合乎逻辑。

于 2012-08-07T13:07:06.597 回答