我有点困惑于DDD中的聚合根概念。理论告诉我们,它应该是一个与当前操作相关的聚合根。
例如,我有一个根帐户,它代表一个公司。它有地址,属于帐户的用户,还有其他一些属性。
我有几页;一是管理一般信息,如姓名,电子邮件,电话……另一个是维护地址。再一次显示所有用户(编辑用户信息,这可能也在Account对象下)
在第一种情况下我不关心地址,第二种我不在乎名字,电子邮件.
我需要两个单独的帐户对象还是只需要一个帐户?(模型可能比我描述的更复杂)
因此,例如,我可能以类结束: BasicAccountInformation、AccountAddress、AccountUsers.还是只有一个:包含所有数据的帐户?
正确的DDD方法是什么?我认为,在一种情况下,我会得到一个非常复杂的类,包含很多属性和逻辑;或者很多简单的类,每个类有2-10个属性。
发布于 2016-07-26 00:51:25
我需要多少根?
至少有一个。
聚合作为一致性边界。如果您将整个域建模为单个聚合,并提供一个“聚合根”,以确保您的业务不变由每次写入来维护,那么您就可以继续工作了。
嗯,你可以慢慢来。聚合根充当聚合边界中所有状态的序列化瓶颈。如果您希望“同时”更新模型的两个不同部分,那么您将需要对业务不变的责任进行分区。
我有两页,一是管理一般信息,如姓名,电子邮件,电话.另一个是维护地址。
报告很棒。他们告诉你你需要为你的模型收集什么数据。
但是报告很难告诉你你的汇总在哪里--你的聚合的首要关注点不是读取/呈现/报告你的数据,而是写它。
通过在模型上查找执行写入时需要分组的数据,可以找到聚合。您需要哪些数据来执行业务不变?
这种启发式倾向于吸收CRUD域,因为模型的大多数状态都是独立于其余部分的。
您可以查看实体关系;如果两个聚合“共享”一个实体,那么该实体可能属于第三个聚合。
另一件可以看的东西是实体生命周期。如果子实体可以超过聚合根,那么您就知道建模错误了。
根据你所描述的,这在这里也没有多大帮助;你实际上已经有了账户,还有一堆生活在里面的东西。
有时候,所有这些都失败了,您最终使用的是启发式的“哪些数据只是偶尔加载一次”,您只需将其放入一个键值存储中,然后返回到交付业务价值。
https://stackoverflow.com/questions/38579042
复制相似问题