Design patterns 在另一个存储库中使用一个存储库
我是DDD新手,我有一个合作伙伴聚合,其中有一个用户引用。 用户对象本身是另一个聚合 由于并非所有用户都必须在Partner对象中引用,因此User对象是聚合根。 合作伙伴也是聚合根 第一: 如果一个聚合根在另一个聚合根中,我的设计会出错吗 第二: 如果设计是正确的,那么在另一个存储库中使用一个存储库来持久化合作伙伴会是一种糟糕的做法吗?(PartnerRepository中的UserRepository) Obs:我没有使用任何ORM框架 第一:我的设计中有一个聚合根是错误的吗 另一个 我对此表示怀疑。例如,Design patterns 在另一个存储库中使用一个存储库,design-patterns,domain-driven-design,repository-pattern,Design Patterns,Domain Driven Design,Repository Pattern,我是DDD新手,我有一个合作伙伴聚合,其中有一个用户引用。 用户对象本身是另一个聚合 由于并非所有用户都必须在Partner对象中引用,因此User对象是聚合根。 合作伙伴也是聚合根 第一: 如果一个聚合根在另一个聚合根中,我的设计会出错吗 第二: 如果设计是正确的,那么在另一个存储库中使用一个存储库来持久化合作伙伴会是一种糟糕的做法吗?(PartnerRepository中的UserRepository) Obs:我没有使用任何ORM框架 第一:我的设计中有一个聚合根是错误的吗 另一个 我对此
User
可以是称为用户管理的某个域的聚合根,UserProfile
可以是称为用户配置文件的某个其他域的聚合根,并且两个域对象之间可能存在1:1
关联
第二:如果设计是正确的,那么使用它会是一种不好的做法吗
在另一个存储库中保存合作伙伴?(用户存储库)
在PartnerRepository内)
你应该确保有一个明确的关注点分离,并遵循单一责任原则。也就是说,存储库可以处理单个域对象,而在另一个域对象中注入存储库则为处理相关或不相关的域对象打开了大门
我的建议是,您应该在域服务中表示事务,在那里您可以根据需要注入任意多的存储库
我是DDD的新手
我将从DDD的角度来回答这个问题,而不是OOP(面向对象编程)
第一:我的设计中有一个聚合根是错误的吗
另一个
它不会遵循领域驱动设计的一般准则。如果要从另一个聚合根引用一个聚合根,则应按id引用它
第二:如果设计是正确的,那么使用它会是一种不好的做法吗
在另一个存储库中保存合作伙伴?(用户存储库)
在PartnerRepository内)
同样,如果遵循DDD的指导原则,则不会这样做,而是使用单独的存储库分别持久化每个聚合
,可能是DDD领域中第二个更好解释的数字
第一:如果一个聚合根在另一个聚合根中,我的设计会出错吗
对
合计
一组相关对象,它们被视为一个单元,用于数据更改。外部引用仅限于聚合中指定为根的一个成员。在聚合的边界内应用一组一致性规则
您的设计面临的问题是:如果允许用户聚合独立修改相同的状态,则伙伴聚合无法保护其自身的不变量
在您的设计中,当您断言X是一个聚合时,您提出了两个声明
第三个是在模型中发现新实体,其中包括合作伙伴聚合实际用于验证的用户部分。这可能是用户状态的快照,也可能是将用户重构为多个部分。感谢设计中的答案我的用户中有一个UserRole对象,这个UserRole引用了合作伙伴,因此当我插入合作伙伴时,我必须先插入没有用户的合作伙伴,这样我才能获得合作伙伴引用id,然后将用户持久化为UserRole。这就是为什么我需要在Partner Repository中添加UserRepository,以便它可以将Partner作为聚合处理插入。我想用户角色和用户关系的设计是设计中的一个棘手的部分。@MarcoPrado也许我弄错了,但在坚持合作伙伴之前,用户和角色都应该存在:OSorry我会尽力解释。一个用户可以连接到多个合作伙伴,因此每个UserRole必须对应于与合作伙伴的关系,这样每个用户可以有一个或多个UserRole,每个UserRole引用合作伙伴,但合作伙伴必须有一个用户,即拥有合作伙伴的用户,这种关系也通过用户中的用户角色来表示model@MarcoPrado顺便说一句,我不明白为什么你不能实现我在回答中已经解释过的一切。既然您说您没有使用OR/M,显然您需要实现一个