Dependency injection DDD:可以将存储库注入到实体中吗?

Dependency injection DDD:可以将存储库注入到实体中吗?,dependency-injection,domain-driven-design,repository,repository-pattern,ddd-repositories,Dependency Injection,Domain Driven Design,Repository,Repository Pattern,Ddd Repositories,可能重复: 我过去问过一个问题。然而,我相信这不是一个自我复制:我最初问题的好答案是非常具体的领域问题,并没有讨论一般的问题 让我们举一个新的例子,我偶然发现: 我有一个带关联边界的分区实体; 我有一个商店实体,它有一个位置和一个区域属性; ZoneRepository可以找到包含特定位置的分区。 决不能直接设置存储区的zone属性,而应在指定此属性时从位置中扣除。因此,我认为这样做是合乎逻辑的: 班级商店 { 公共无效设置点位置,分区存款回购 { 这个位置=位置; this.zone=rep

可能重复:

我过去问过一个问题。然而,我相信这不是一个自我复制:我最初问题的好答案是非常具体的领域问题,并没有讨论一般的问题

让我们举一个新的例子,我偶然发现:

我有一个带关联边界的分区实体; 我有一个商店实体,它有一个位置和一个区域属性; ZoneRepository可以找到包含特定位置的分区。 决不能直接设置存储区的zone属性,而应在指定此属性时从位置中扣除。因此,我认为这样做是合乎逻辑的:

班级商店 { 公共无效设置点位置,分区存款回购 { 这个位置=位置; this.zone=repo.findByLocationlocation; } }
这种方法是否有缺点和注意事项?如果是这样,你能提出现实的替代方案吗?

区域和位置之间的关系是什么?区域必须具有Location属性,对吗?否则,您将无法按位置搜索区域。这会是一种双向关系吗?我的意思是,你为什么不能这样做

班级商店 { 公共函数setLocationPoint$位置 { $this->location=$location; $this->zone=$location->zone; } } 或者,您可以冷使用上面层中的存储库,然后只需传入您需要的内容:

班级商店 { 公共功能设置位置点$位置,区域$区域 { $this->location=$location; $this->zone=$zone; } }
一般来说,除非绝对必要,否则我不会将存储库注入,在这种情况下,情况并非如此。即使这样,我也不会将其传递到方法中,而是使用IOC容器将其传递到方法中。

区域和位置之间的关系是什么?区域必须具有Location属性,对吗?否则,您将无法按位置搜索区域。这会是一种双向关系吗?我的意思是,你为什么不能这样做

班级商店 { 公共函数setLocationPoint$位置 { $this->location=$location; $this->zone=$location->zone; } } 或者,您可以冷使用上面层中的存储库,然后只需传入您需要的内容:

班级商店 { 公共功能设置位置点$位置,区域$区域 { $this->location=$location; $this->zone=$zone; } }
一般来说,除非绝对必要,否则我不会将存储库注入,在这种情况下,情况并非如此。即使这样,我也不会将其传递到方法中,而是使用IOC容器将其传递到方法中。

问题中可能不清楚,但位置是一个点,分区的边界是一个多边形。当商店的位置在地图上精确定位时,我需要找到哪个区域包含该点。在这种情况下,我会选择我的第二个建议。这确实是一个解决方案,但它不能保证使用一致的位置区域数据调用此方法!这个问题可能不清楚,但位置是一个点,区域的边界是一个多边形。当商店的位置在地图上精确定位时,我需要找到哪个区域包含该点。在这种情况下,我会选择我的第二个建议。这确实是一个解决方案,但它不能保证使用一致的位置区域数据调用此方法!这不是一个重复的问题。这个问题是关于DDD视角的,假设的重复问题与DDD无关DDD@fabien7474欢迎来到StackOverflow,在这里,一次投票孕育另一次投票。如果你认为值得,你可以投票重新讨论这个问题!这不是一个重复的问题。这个问题是关于DDD视角的,假设的重复问题与DDD无关DDD@fabien7474欢迎来到StackOverflow,在这里,一次投票孕育另一次投票。如果你认为值得,你可以投票重新讨论这个问题!