4

我最近在学习 DDD,并不太了解这些概念。我对示例博客应用程序有一些疑问。

假设博客系统中有四个域对象:UserBlog和。一个可以只有一个,a有多个实体,a有很多实体。PostCommentUserBlogBlogPostPostComment

我的设计是Blog聚合根:

class Blog {
    private User;
    private List<Post> posts;
}

class Post {
    private List<Comment> comments;
}

class BlogRepository {
    public void saveBlog(Blog blog);
    public void findBlogById(long id);
    public void getAllBlogs();
}

我这样设计聚合根和存储库是否正确?

我有一些要求来获取Comment用户为所有实体添加的所有Blog实体,并且User允许修改她/他自己的Comment.

我的问题是如何实现这些要求?

4

1 回答 1

6

虽然您提供的模型反映了领域,但它并不是最佳的 DDD 实现。使用 DDD,除了考虑实体之间的关系之外,还必须考虑事务一致性边界。因此,最好将 a 和 设计BlogPostUser通过 ID 相互引用的单独聚合。此外,实体没有理由Blog需要拥有帖子集合。您永远不需要加载整个博客,并且行为永远不会跨越多个帖子。相反,提供分页存储库方法来加载博客的帖子子集。然而, AComment可以是一个值对象,因此注释集合应该与Post总计的。获取用户所有评论的最简单方法是创建一个存储库查询方法,该方法返回一个读取模型,以防止将查询与实体中的行为混为一谈。有关设计聚合的更多信息,请查看有效聚合设计

于 2013-04-24T15:24:21.367 回答