Domain driven design 领域驱动设计中的根聚合问题

Domain driven design 领域驱动设计中的根聚合问题,domain-driven-design,Domain Driven Design,我有两个实体Publisher和SocialAccount,它们都是独立的,并且有多对多的关系。两者都是根聚合,现在我无法通过Publisher获得社会帐户,我想将M到M的关系转换为1到M。因此我引入了另一个实体注册,将具有{PubID,SocID,CreateDate}。现在,Publisher和Registration之间存在1:M的关系,Registration和SocialAccount之间存在1:1的关系。所以出版商会有 列表_注册{get;set;} 但当我创建聚合边界时,Publi

我有两个实体Publisher和SocialAccount,它们都是独立的,并且有多对多的关系。两者都是根聚合,现在我无法通过Publisher获得社会帐户,我想将M到M的关系转换为1到M。因此我引入了另一个实体注册,将具有{PubID,SocID,CreateDate}。现在,Publisher和Registration之间存在1:M的关系,Registration和SocialAccount之间存在1:1的关系。所以出版商会有

列表_注册{get;set;}

但当我创建聚合边界时,Publisher是我的根,根据聚合原则,只有根聚合将保留对另一个根聚合的引用。但在这里,注册是有参考价值的


我也违反了聚合原则,因为注册是关联的社会帐户实体。

您对聚合概念的使用似乎不正确。聚合中的对象实际上可以包含对其他聚合的引用。规则是外部对象无法保存对聚合中某个对象的引用

在注册对象上,您创建它似乎是为了避免一些聚合到聚合的关系。这不是创建对象的原因。如果您的域中确实存在注册,请创建它并对其进行建模。如果它不在您的域中,不要添加它只是为了遍历某些路径

添加注册后,您说它不能持有对社交帐户的引用,因为它是Publisher的一部分。这不是规则,但更重要的是,注册是如何突然成为出版商总数的一部分的?仅凭出版商拥有注册收藏

聚合是一组对象,它们作为一个单元来维护状态和不变量。一种关系的存在本身并不意味着一种集体的成员资格

但是现在看看另一面。社会帐户的注册率为1比1。如果我们删除了一个社交账户,那么仍然在出版商处注册有意义吗?如果不是,那么注册实际上可能是SocialAccount聚合的一部分。这就是我们创建聚合的原因——以确保对象及其关系在状态更改后始终有效。如果删除SocialAccount的状态更改包括删除与该帐户关联的所有注册,我们希望将其包括在集合中以强制执行该规则

现在您确实违反了“聚合规则”——您与发布者之间存在外部关系,即注册,这是SocialAccount聚合的内部部分


这些概念不仅仅是规则,它们是有原因的。你需要回顾聚合的真正含义,理解规则的真正含义,它们的真正含义,以及它们存在的原因。然后重新评估您的关系和相应的聚合定义。

您对聚合概念的使用似乎不正确。聚合中的对象实际上可以包含对其他聚合的引用。规则是外部对象无法保存对聚合中某个对象的引用

在注册对象上,您创建它似乎是为了避免一些聚合到聚合的关系。这不是创建对象的原因。如果您的域中确实存在注册,请创建它并对其进行建模。如果它不在您的域中,不要添加它只是为了遍历某些路径

添加注册后,您说它不能持有对社交帐户的引用,因为它是Publisher的一部分。这不是规则,但更重要的是,注册是如何突然成为出版商总数的一部分的?仅凭出版商拥有注册收藏

聚合是一组对象,它们作为一个单元来维护状态和不变量。一种关系的存在本身并不意味着一种集体的成员资格

但是现在看看另一面。社会帐户的注册率为1比1。如果我们删除了一个社交账户,那么仍然在出版商处注册有意义吗?如果不是,那么注册实际上可能是SocialAccount聚合的一部分。这就是我们创建聚合的原因——以确保对象及其关系在状态更改后始终有效。如果删除SocialAccount的状态更改包括删除与该帐户关联的所有注册,我们希望将其包括在集合中以强制执行该规则

现在您确实违反了“聚合规则”——您与发布者之间存在外部关系,即注册,这是SocialAccount聚合的内部部分


这些概念不仅仅是规则,它们是有原因的。你需要回顾聚合的真正含义,理解规则的真正含义,它们的真正含义,以及它们存在的原因。然后重新评估您的关系并相应地聚合定义。

首先,我们需要一个抽象来封装模型中的引用

聚合是关联对象的集群,我们将其作为一个单元来处理数据更改

每个聚合都有一个根和一个边界。边界定义了聚合内部的内容。根是聚合中包含的单个特定实体。根是聚合中允许外部对象保留引用的唯一成员,尽管边界内的对象可以彼此保留引用。根实体以外的实体具有本地标识,但该标识只需在聚合中区分,因为外部对象无法从根实体的上下文中看到它


你怎么看Ssyphus?

首先,我们需要一个抽象来封装模型中的引用

聚合是一个关联对象的集群,我们