这个实例主要说明一个论坛发帖与回复的场景。
一般大家的理解是回复必须依赖与帖子,并且回复是没有单独存在的必要,并且帖子与回复通常具有一些不变性约束规则,比如发布一个回复,在帖子中同时增加一次回复次数;回复过的帖子就不再允许删除等,所以一般理解是帖子与回复属于一个聚合,帖子是聚合根,回复是聚合中的一个实体。如下:
虽然满足了聚合与聚合根的划分的基本要求,但是还应该从两个方面来考虑:
1.性能:如果帖子与回复同属一个聚合,如果要对一个帖子添加回复,必须从聚合根帖子进行操作,并且同时保存整个聚合。如果一个帖子被多个人回复,那就存在并发的问题,性能会比较差。
2.场景:发布帖子与发布回复应该是两个独立的场景,也就是发布一个帖子后可以没有回复,回复可以是后期任意时刻的一个操作。
鉴于此,建议的聚合与聚合根的划分如下:
为了保证规则的一致性,可以通过领域服务或应用层服务协调来保证。
欢迎加入QQ讨论群:309287205