首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >乐观锁定&聚合root的内部实体

乐观锁定&聚合root的内部实体
EN

Stack Overflow用户
提问于 2018-06-15 18:42:19
回答 3查看 447关注 0票数 1

让我们假设我有一个具有内部实体Shape的聚合根PicturePicture包含形状列表。

Shape仍然是Picture聚合根的内部实体,因为Picture在多个Shape实例之间定义了一些规则。比方说,当Picture是只读的并且Picture可能不包含两个相同颜色的Shapes时,您不能分配新的Shapes。定义了这些规则后,聚合根-了解其所有Shapes -现在可以一致地验证规则。

为了不破坏德米特定律,我总是通过Picture访问Shape。我的问题是与聚合版本控制的优化锁定相关的。如果我通过Picture根聚合来更新Shape的颜色,我是在增加聚集根Picture的版本,还是只增加Shape的版本?

我的假设是-仅限于Shape,因为oposite会阻止一个Picture的多个Shapes的并行更新。

但是,如果在Shape更新期间,Picture被设置为只读模式,该怎么办?

谢谢你的建议。

EN

Stack Overflow用户

发布于 2018-06-15 20:51:37

我的问题与聚合版本控制的优化锁定相关。如果我通过Picture root聚合来更新形状的颜色,我是在增加aggreagate root - Picture的版本,还是只增加形状的版本?

您正在增加根目录的版本。具体地说,您将聚合根从“指向”Shape的version:4更改为指向version:5的根。

这有点类似于git处理文件更改的方式。您编辑了该文件,这意味着以前指向blob:1的文件名现在指向blob:2。但是" file“只是树中的一个名称,因此我们需要将树从名为{ file -> blob:1 }的树更改为名为{ file -> blob:2 }的树,依此类推,直到根。

以另一种方式重复相同的想法,聚合的任何固定版本都是“不可变的”--我应该能够整天查看version:4,并且不会受到您对形状所做的更改的影响,这意味着您的更改需要在新版本中发生。

作为澄清:这很奇怪。

作为一种数据模式,聚合是单个关系图,它会自动变化,以确保保持不变量。但是“对象”想要封装它们自己的状态。因此,我们将单个树拆分成由对象单独管理的片段,然后将它们重新缝合在一起,创建一棵新树。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50873959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档