Domain driven design 创建聚合实体的推荐方法

Domain driven design 创建聚合实体的推荐方法,domain-driven-design,Domain Driven Design,假设我有一个聚合名“ABCD”,它是根实体,在该聚合中有另一个实体“IJKL”。我的问题是,创建IJKL实体并在数据库中持久化的推荐方法是什么?根据聚合的定义,IJKL的生存期与ABCD的生存期是耦合的,所以不应该显式地创建IJKL;相反,您应该在ABCD上调用逻辑,该逻辑将决定(内部)如何/何时处理IJKL 对于新实例,聚合创建逻辑应该封装在工厂中,该工厂将负责与聚合的其余部分一起“更新”IJKL实例 对于持久性问题(加载/保存现有实体),逻辑应该是存储库SaveABCD方法的一部分,该方法负

假设我有一个聚合名“ABCD”,它是根实体,在该聚合中有另一个实体“IJKL”。我的问题是,创建IJKL实体并在数据库中持久化的推荐方法是什么?根据聚合的定义,IJKL的生存期与ABCD的生存期是耦合的,所以不应该显式地创建IJKL;相反,您应该在ABCD上调用逻辑,该逻辑将决定(内部)如何/何时处理IJKL

对于新实例,聚合创建逻辑应该封装在工厂中,该工厂将负责与聚合的其余部分一起“更新”IJKL实例

对于持久性问题(加载/保存现有实体),逻辑应该是存储库SaveABCD方法的一部分,该方法负责整个聚合的持久性


如果您始终发现自己需要直接操作IJKL,那么您的聚合存在问题-ABCD不是正确的根,或者IJKL需要位于单独的聚合中。

您可以使用ORM映射它,或者使用事件源记录状态更改。在我的IABCDRepository中,我可以使用以下方法:,公共静态void SaveIJKL(IJKL ijklObject)在我的应用程序服务层我可以在我的项目中使用void SaveIJKL(IJKL ijklObject)这样的方法提供服务吗?我有广告客户实体,它是聚合的根实体,在聚合中有bonusprogram实体,bonusprogram实体(bonusprogram就像承诺,例如-:如果广告客户订阅bonusprogram A,这意味着广告客户必须在一个月内制作20个新广告,这将产生100美元的奖金,广告客户将获得)不是由广告客户创建的,但广告客户只能从下拉列表中订阅bonsuprogram。现在,如果管理员希望在当前bonsuprogram列表中添加新的bonsuprogram,他将如何做到这一点?请记住,他不能对广告客户这样做。