我正在尝试使用域驱动设计规则和模式开发我的第一个应用程序。
在我的业务场景中,我必须管理客户列表并跟踪发送到特定客户目的地的所有包裹。因此,按照规则,事实证明:
- 客户是一个实体,也是一个 AggregateRoot。
- 目的地是一个实体,它是客户的孩子(因为没有客户就没有意义)
- 包是一个实体。它也是另一个 AggregateRoot,因为它是一个不同的事务边界,我使用 AddDestination(string destinationName ...) 方法开发了客户聚合,该方法负责为客户创建一个新的目标。
现在我需要开发 Package 类,我必须在其中维护对已运送包裹的目的地的引用。按照 DDD 规则,我不能直接引用子实体 id,因为我不能引用另一个聚合的子实体。
我需要做什么?
- 我是否必须使用目标所需的数据创建一个新的 ValueObejct 并公开它?(通过这种方式,我能够保留只能通过 Customer AggregateRoot 以书面形式访问的 Destionation 的封装和规则)。通过这种方式,外部类可以访问目标的字段并使用这些字段执行逻辑/检查,但不能更改目标的状态。
- 我是否必须添加一个 DestinationNumber 字段(在客户中渐进式),创建一个包含 CustomerId 和 DestinationNumber 的 ValueObject 并在 Package 聚合中使用它?
- ?
有人可以帮帮我吗?请详细说明回复,因为我想了解更多这种情况。