首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DDD:我需要多少根?

DDD:我需要多少根?
EN

Stack Overflow用户
提问于 2016-07-25 23:47:15
回答 1查看 1.6K关注 0票数 0

我有点困惑于DDD中的聚合根概念。理论告诉我们,它应该是一个与当前操作相关的聚合根。

例如,我有一个根帐户,它代表一个公司。它有地址,属于帐户的用户,还有其他一些属性。

我有几页;一是管理一般信息,如姓名,电子邮件,电话……另一个是维护地址。再一次显示所有用户(编辑用户信息,这可能也在Account对象下)

在第一种情况下我不关心地址,第二种我不在乎名字,电子邮件.

我需要两个单独的帐户对象还是只需要一个帐户?(模型可能比我描述的更复杂)

因此,例如,我可能以类结束: BasicAccountInformation、AccountAddress、AccountUsers.还是只有一个:包含所有数据的帐户?

正确的DDD方法是什么?我认为,在一种情况下,我会得到一个非常复杂的类,包含很多属性和逻辑;或者很多简单的类,每个类有2-10个属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-26 00:51:25

我需要多少根?

至少有一个。

聚合作为一致性边界。如果您将整个域建模为单个聚合,并提供一个“聚合根”,以确保您的业务不变由每次写入来维护,那么您就可以继续工作了。

嗯,你可以慢慢来。聚合根充当聚合边界中所有状态的序列化瓶颈。如果您希望“同时”更新模型的两个不同部分,那么您将需要对业务不变的责任进行分区。

我有两页,一是管理一般信息,如姓名,电子邮件,电话.另一个是维护地址。

报告很棒。他们告诉你你需要为你的模型收集什么数据。

但是报告很难告诉你你的汇总在哪里--你的聚合的首要关注点不是读取/呈现/报告你的数据,而是写它。

通过在模型上查找执行写入时需要分组的数据,可以找到聚合。您需要哪些数据来执行业务不变?

这种启发式倾向于吸收CRUD域,因为模型的大多数状态都是独立于其余部分的。

您可以查看实体关系;如果两个聚合“共享”一个实体,那么该实体可能属于第三个聚合。

另一件可以看的东西是实体生命周期。如果子实体可以超过聚合根,那么您就知道建模错误了。

根据你所描述的,这在这里也没有多大帮助;你实际上已经有了账户,还有一堆生活在里面的东西。

有时候,所有这些都失败了,您最终使用的是启发式的“哪些数据只是偶尔加载一次”,您只需将其放入一个键值存储中,然后返回到交付业务价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38579042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档