Php DDD处理相互依赖的两个域模型之间的关联
跳入DDD的世界对我来说是一种旋风。虽然我做了很多研究,但我正在努力改变我的思维过程 所以,我有一个包和一个产品实体。没有产品,包装就无法发挥作用;反之亦然。当我需要获取属于某个包的产品时,问题就出现了(注意:该包是可定制的,这意味着属于该包的产品在下一轮可能会有所不同)。这似乎不属于任何实体,而且将其应用于包或产品实体将使它们紧密耦合 我必须强调,我之所以使用关联这个词,是因为我试图在域级别而不是在基础设施上解决这个问题 一点思考让我产生了以下想法:Php DDD处理相互依赖的两个域模型之间的关联,php,domain-driven-design,Php,Domain Driven Design,跳入DDD的世界对我来说是一种旋风。虽然我做了很多研究,但我正在努力改变我的思维过程 所以,我有一个包和一个产品实体。没有产品,包装就无法发挥作用;反之亦然。当我需要获取属于某个包的产品时,问题就出现了(注意:该包是可定制的,这意味着属于该包的产品在下一轮可能会有所不同)。这似乎不属于任何实体,而且将其应用于包或产品实体将使它们紧密耦合 我必须强调,我之所以使用关联这个词,是因为我试图在域级别而不是在基础设施上解决这个问题 一点思考让我产生了以下想法: 使包成为聚合根&产品成为 包实体。然而,
- 使包成为聚合根&产品成为 包实体。然而,我相信这两种包装和产品 是否已唯一标识因其而产生的实体
- 创建一个域服务,将包ID和映射带到 基础结构层以查找关联的产品。但是, 看一眼就觉得有点啰嗦
PackageProduct
(或者更好的是,您的领域专家使用一些术语来定义关联),并在产品链接到包时创建此聚合的新实例。该实体上有一个PackageId和一个ProductId
但是,如果存在业务规则,例如一个包只能有一个给定类型的产品,或者最多有5个产品,则将PackageProduct
实体设置为Package
聚合中的一个实体,聚合根为Package
。PackageProduct
将有一个对Package
的引用和ProductId
的属性。请参阅下面的一些术语说明
实体与聚合
根据你的问题,似乎对术语有一些混淆。在DDD中,我们有:
- 实体:
- 拥有一个比任何给定的财产都有效的身份
- 具有可变状态
- 一般来说,业务流程建模都是关于如何改变实体的状态
- 聚合
- 必须在其上强制执行不变量的一组实体
- 不变量是必须始终保持不变的业务规则
- 单个实体始终被指定为“聚合根”
- 其他实体只能通过根引用聚合
- 在对业务流程进行建模以改变状态时,聚合是所有实体的状态必须与不变量一致的边界
- 在聚合边界之外,其他实体可能会得到异步更新-目标是
- 必须在其上强制执行不变量的一组实体
- 域服务
- 包含不属于单个实体的业务逻辑的服务
- 它通常不仅仅是基础设施的包装
PackageProduct
(或者更好的是,您的领域专家使用一些术语来定义关联),并在产品链接到包时创建此聚合的新实例。该实体上有一个PackageId和一个ProductId
但是,如果存在业务规则,例如一个包只能有一个给定类型的产品,或者最多有5个产品,则将PackageProduct
实体设置为Package
聚合中的一个实体,聚合根为Package
。PackageProduct
将