【问题标题】:Defining aggregate roots and relationships between then定义聚合根和 then 之间的关系
【发布时间】:2011-10-06 16:50:11
【问题描述】:

我正在学习 DDD,并想开始建模一个相当简单的示例,即博客应用程序。

我有点困惑的一个领域是定义聚合根。

到目前为止,这是我的模型:

Site
    has many
        Blog
            has reference to Site
            has many
                Post
                    has reference to Blog
                    has Category
                    has many
                        Comments

在这个例子中,我唯一确定的是 Comment 是一个值对象,因为它在帖子上下文之外没有任何意义。

然后基于:

只有聚合根可以直接通过数据库查询获得。 其他的一切都必须通过遍历来完成。

我倾向于制作站点、博客和帖子 AR,因为我想直接获取它们而不是遍历集合。

我意识到博客并不完全是一个复杂的域模型,因此并不需要应用 DDD,但我只是想了解这些类型的关系是如何建模的。

【问题讨论】:

    标签: domain-driven-design ddd-repositories


    【解决方案1】:

    并不是因为你有一个层次结构,你就必须定义一个聚合。如果您要在层次结构中维护不变量,聚合构造将派上用场。

    在您的示例中,假设您希望博客中的每个帖子都有一个唯一的“slug”(Wordpress 样式,以便标题出现在 URL 中)。只有“博客”实体可以强制执行此不变量。同样,在这种情况下,将其设为聚合并通过博客实体添加帖子是有意义的。

    另一个例子:您的网站可以是公开的或私有的。这是站点实体的一个属性。因此,您必须确保使用来自站点的聚合根的遍历来访问帖子,因为只有站点可以授权您或不授权您访问底层对象。

    如果您将网站设为聚合根,您最终可能会得到这样的 url:

    http://site.com/myblog/apost

    您的代码将首先检索站点实体,然后从该实体获取博客,然后从博客实体获取帖子。如何检索子实体取决于您。此模型不会强制您在检索站点时将所有博客文章加载到内存中。它只会强制您从站点检索博客,以及从博客中检索帖子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2013-12-11
      • 1970-01-01
      相关资源
      最近更新 更多