在我的域模型中,我有一个项目实体(也是聚合根),它有产品实体作为子实体。我的域模型的不变量之一是我不能有两个产品具有相同项目的相同子代码(但如果项目不同则可以)。
我的产品由部分组成,这些部分也有类似的规则(同一产品中的每个部分都必须有唯一的代码),所以部分是产品的子项,因为我需要确保该规则。产品的孩子也是我需要做的创建它的活动,因为我正在描述一个生产跟踪系统。
现在,活动可以有子活动,可以分配到工厂区域等等。
基本上我所拥有的是所有实体都从项目开始只是因为我需要确保一个不变量(=业务规则)但不是最好的解决方案,因为每次我需要检索一个实体时我都需要填写所有项目(可以有2000 多种产品)。
我可以做些什么来拆分保留我的不变量,同时让我可以加载特定的活动(或产品),而无需在每次需要子实体时检索我的项目的所有产品?
我是否需要在多个 AggregateRoots 中拆分实体,在项目中维护 ProjectProductValueObject(字符串代码)列表并在 Aggregate 的构造函数中使用域事件来触发像 ProductCreatedEvent 这样的东西,它尝试使用 AddProduct 在我的项目中创建和添加新的 ProjectProductValueObject (ProjectProductValueObject product) 方法包含我的业务规则,如果不满足会抛出异常?这是否可以并符合 DDD 原则?
我还有其他选择吗?