DDD:Repository可以在聚合中返回实体吗?

时间:2012-08-05 10:20:27

标签: domain-driven-design entity ddd-repositories aggregateroot

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

但是,我们有一个可以从City页面浏览的PointOfInterest网页(主要是出于搜索引擎优化的原因),其网址中只有PointOfInterest id

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

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

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

1 个答案:

答案 0 :(得分:4)

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

正如Wouter指出的那样,你觉得需要做这样令人费解的事情可能表明目前的设计并不合适。如果PointOfInterest成为您应用程序中的主要实体之一,并且如果用户可以从导航开始直接访问它而不必首先通过城市,为什么不考虑给PoI自己的聚合?至于PoI / PoIType关系,PoI的PoIType似乎比其他方式更合乎逻辑。