如何根据DDD实践建模博客?

时间:2018-01-18 05:57:08

标签: oop domain-driven-design modeling ddd-repositories

假设我们想要基于域驱动设计实践来建模博客。主要实体是Blog,User,Post,Comment和Like。那么,如何定义聚合,值对象和存储库?通过DDD定义,由于所有实体都依赖于Blog实体,因此似乎只有一个大型聚合与Blog作为它的聚合根。但是,它带来了太多的一致性和性能挑战。

2 个答案:

答案 0 :(得分:1)

您应该根据一致性要求对聚合建模。一致性边界越大=>总量越大。

  

你认为只有一个聚合根与博客一样是有效的吗?从那里我们可以有blog.Posts,blog.Posts(id).Comments和blog.Posts(id).Likes

只有一个像神一样的大聚合Blog提供了最大的一致性边界,但它会极大地影响性能。想一想:每当有人创建/发布/取消发布/喜欢帖子,发布/编辑/删除评论,然后加载整个Blog聚合,就会对其嵌套实体执行操作,然后保持该操作。全部在一次交易中。

我建议您阅读有关设计聚合的this blog post

答案 1 :(得分:0)

  

你认为只有一个聚合根与博客作为它的根是有效的吗?

是的,绝对。

定义较小的聚合边界是有好处的;例如,如果进行无关更改的用户不会相互阻止,您可以获得更好的扩展,如果您可以看到域的不同部分彼此隔离,则更容易推理域模型。

但是这样做会增加复杂性;因此,您可能希望推迟复杂性的引入,直到您更好地理解问题,或者直到您有足够的用户来解决争用问题,从而提供切实的业务价值。

对于类似博客的内容,如果您的主要用例是单个人类作者,那么您可能不会有很多争用问题 - 机器将比人类快得多,所以单个聚合会没问题。