Ben*_*min 4 entity domain-driven-design ddd-repositories aggregateroot
我有一个City聚合,有一个PointOfInterest实体列表。后一个实体在逻辑上位于 City 聚合内,原因在此不作解释。除了聚合根 City 之外,没有任何实体拥有指向 PointOfInterest 的链接。
但是,我们有一个 PointOfInterest 网页,可从 City 页面浏览,该网页(主要是出于 SEO 原因)id在其 URL 中仅包含 PointOfInterest 。
因此,从控制器直接查询 CityRepository 以获取 PointOfInterest 会很方便,例如CityRepository.findPointOfInterestById().
另一种选择是 query CityRepository.findCityByPointOfInterestId(), then City.findPointOfInterestById(),在这种情况下看起来有点麻烦。
第一种方法有什么问题吗?
由于 PointOfInterest 是 City 聚合的一部分,您必须接受对 PointOfInterests 的所有引用都必须通过遍历 City 获得。CityRepository 似乎不适合公开 GetPoI() 方法,因为它会允许外部对象获得对 PoI 的直接引用,从而破坏了聚合的全部目的。此外,处理 PoI 似乎并不是 CityRepository 的自然责任。
正如 Wouter 指出的那样,你觉得需要做这样复杂的事情可能表明当前的设计不太合适。如果 PointOfInterest 被证明是您应用程序中的主要实体之一,并且如果用户可以从导航一开始就访问它,而不必先经过城市,那么为什么不考虑为 PoI 提供自己的聚合呢?至于 PoI / PoIType 关系,PoI 拥有 PoIType 似乎比其他方式更合乎逻辑。