知识卡片
事务边界定粒度
内容
必须在同一事务中一起改变的对象,往往属于同一聚合;不需要同步一致的对象,应通过引用或事件协作。发散:聚合过大拖垮并发,过小又把业务一致性交给调用方。
参考来源
- 位置:《复杂软件设计之道》第3章《聚合设计》"3.2.5 通过事务边界设计聚合"一节(源文件:_chapter_text/ch03.txt)
- 结论依据:原文以专家门诊预约案例说明聚合边界过小(30分钟时段)会导致"数据库事务的边界与聚合事务边界不符",无法防止同一患者重复预约;扩大边界又会带来新的副作用,说明聚合粒度必须与需要同步一致的事务范围匹配,"不要试图用聚合做流程的事情,也不要让聚合做基本时间段内微观的事情"。
- 原始内容:原因是:数据库事务的边界与聚合事务边界不符,两者边界不对齐……解决办法是修改聚合事务的边界大小……天是时间段的集合聚合,周是天的集合聚合,月是天的集合聚合,具体以哪个聚合大小设计,需要结合业务特点和流程,不要试图用聚合做流程的事情,也不要让聚合做基本时间段内微观的事情。