定义聚合根和之间的关系

时间:2011-10-06 16:50:12

标签: domain-driven-design ddd-repositories

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

我有点困惑的一个方面是定义聚合根。

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

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

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

但后来基于:

  

只能使用数据库查询直接获取聚合根。   其他一切都必须通过遍历完成。

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

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

1 个答案:

答案 0 :(得分:2)

这不是因为您有一个必须定义聚合的层次结构。如果您在层次结构中保持不变,聚合构造将会派上用场。

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

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

如果您将网站设为聚合根,则最终可能会显示以下网址:

http://site.com/myblog/apost

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