领域驱动设计之聚合与聚合根实例二
2015-11-25 14:58
295 查看
这个实例主要说明一个论坛发帖与回复的场景。
一般大家的理解是回复必须依赖与帖子,并且回复是没有单独存在的必要,并且帖子与回复通常具有一些不变性约束规则,比如发布一个回复,在帖子中同时增加一次回复次数;回复过的帖子就不再允许删除等,所以一般理解是帖子与回复属于一个聚合,帖子是聚合根,回复是聚合中的一个实体。如下:
虽然满足了聚合与聚合根的划分的基本要求,但是还应该从两个方面来考虑:
1.性能:如果帖子与回复同属一个聚合,如果要对一个帖子添加回复,必须从聚合根帖子进行操作,并且同时保存整个聚合。如果一个帖子被多个人回复,那就存在并发的问题,性能会比较差。
2.场景:发布帖子与发布回复应该是两个独立的场景,也就是发布一个帖子后可以没有回复,回复可以是后期任意时刻的一个操作。
鉴于此,建议的聚合与聚合根的划分如下:
为了保证规则的一致性,可以通过领域服务或应用层服务协调来保证。
一般大家的理解是回复必须依赖与帖子,并且回复是没有单独存在的必要,并且帖子与回复通常具有一些不变性约束规则,比如发布一个回复,在帖子中同时增加一次回复次数;回复过的帖子就不再允许删除等,所以一般理解是帖子与回复属于一个聚合,帖子是聚合根,回复是聚合中的一个实体。如下:
虽然满足了聚合与聚合根的划分的基本要求,但是还应该从两个方面来考虑:
1.性能:如果帖子与回复同属一个聚合,如果要对一个帖子添加回复,必须从聚合根帖子进行操作,并且同时保存整个聚合。如果一个帖子被多个人回复,那就存在并发的问题,性能会比较差。
2.场景:发布帖子与发布回复应该是两个独立的场景,也就是发布一个帖子后可以没有回复,回复可以是后期任意时刻的一个操作。
鉴于此,建议的聚合与聚合根的划分如下:
为了保证规则的一致性,可以通过领域服务或应用层服务协调来保证。
相关文章推荐
- jquery根据滚动条动态加载数据
- 基于Redis实现分布式锁以及任务队列
- Hadoop Streaming
- oracle 62进制序列号
- leetcode_java_nim game
- 有趣的Autolayout示例-Masonry实现
- Android启动其他应用的方式
- Android 框架练成 教你打造高效的图片加载框架
- ERROR-2:React
- 使用pushd、popd和dirs来重定义cd命令
- GUI图形用户界面
- ios 开发中 动态库 与静态库的区别
- jpa入门之环境搭建和CRUD基本操作
- 蓝牙设备
- ListView在异步加载动态图片时,往往最后一项或几项被遮盖(IM场景居多)
- Win10手记-IIS部署网站问题解决
- 内部类
- JAVA GC新时代 老年代
- 11087 统计逆序对
- u-boot2011网络驱动模型