一系列简单的聚合根问题(领域驱动设计)

Posted

技术标签:

【中文标题】一系列简单的聚合根问题(领域驱动设计)【英文标题】:A series of simple Aggregate Root questions (Domain Driven Design) 【发布时间】:2010-05-17 09:49:35 【问题描述】:

我有几个(希望是)关于域驱动设计中聚合根的简单问题:

    可以将聚合根作为另一个聚合根的属性吗? 是否可以在两个或多个聚合根中包含给定实体?

我的最后一个问题涉及更多。我有一个网站,其中包含一些真正属于“网站”聚合根的实体。它们是“新闻”、“产品”和“用户”。数据库中没有“网站”表,但“网站”似乎是这三个实体的良好聚合根。 这通常是如何实现的?

谢谢!

【问题讨论】:

【参考方案1】:

您是否有任何跨越整个网站的一致性规则(关于多个新闻产品和用户)?如果不是,这些实体(新闻、产品、用户)是您聚合根的良好候选者。

聚合根主要功能是提供一致性和事务语义边界。

回答你的问题:

    可以,只要这样就可以了 引用聚合根不是 在任何操作过程中修改 包含 AR。这是连接到 一致性边界: 跨越多个操作 不保证聚合 产生一致的结果,所以他们 应该避免

    不,一个实体 (这不是 AR)可以是 只有一个聚合。

【讨论】:

感谢您的回答。考虑新闻、产品和用户,实际上用户似乎属于不同的聚合根,并且由于新闻和产品并不真正相关,它们是它们自己的聚合根。当我正在处理我的域时,您对 1 和 2 的回答也很有意义。

以上是关于一系列简单的聚合根问题(领域驱动设计)的主要内容,如果未能解决你的问题,请参考以下文章

领域驱动设计中实体和聚合之间的区别

如何运用领域驱动设计 - 领域事件

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

应用领域驱动设计规则“仅通过聚合根访问聚合”时如何画线

领域驱动设计:如何设计具有依赖关系的关系聚合