聚合是否涉及数据库中的读锁?

Mik*_*378 5 concurrency domain-driven-design aggregate

我读了Eric Evan的关于DDD的书,聚合章节.

在处理Order/OrderLine示例时,声明:

当两个用户都保存了更改时,订单将存储在数据库中,违反了域模型的不变量.一项重要的商业规则已被打破.甚至没有人知道.显然,锁定单个项目不是一个充分的保障措施.相反,如果我们一次锁定整个订单,则问题就会被阻止.

我很清楚Aggregate的本质是用单个包装的数据库事务来保护不变量.

但是,是否应该在数据库端使用读锁定指定每个聚合,以防止潜在的并发问题(竞争条件),同时由多个用户同时修改此聚合?

制作聚合的真正含义数据库端的读锁收集一些元素吗?

对此的任何澄清都会让我感到高兴.

the*_*Dmi 7

不,这两者是正交的:

聚合设计的目标是建立一致性边界并保护该边界内的不变量.锁定设计的目标是在应用程序中实现适当的并发级别.

这意味着使用相同的聚合设计,不同的锁定机制可能有意义(取决于应用程序的非功能性要求).