写点什么

在领域驱动设计中对聚合进行设计与存储

  • 2014-12-18
  • 本文字数:995 字

    阅读完需:约 3 分钟

在使用领域驱动设计的过程中,使用者们对于如何创建设计良好的聚合(aggregate)这一模式始终知之甚少。在 Vaughn Vernon 近期发布的两篇文章中,他为读者介绍了组合聚合边界的相关指南,并且介绍了在对聚合进行存储的时候如何使用 ORM 的替代技术

《实现领域驱动设计》( Implementing Domain-Driven Design)一书的作者 Vaughn 为了简化聚合的组合,定义了四条他认为很有帮助的规则:

  • 在一致性边界之内确保不变性,这也暗示着在一个事务中应该只对一个聚合进行变更。
  • 设计尽量小的聚合,尽可能实现一个实体这样的最小聚合。
  • 只通过唯一标识的方式对其它聚合进行引用,意味着不应当存在在某个聚合中直接访问另一个聚合的情况出现。
  • 在一致性边界之外使用最终一致性方式。实现这一点可以使用领域事件进行通知,领域中的其它部分可以在一个新的事务之中对其它聚合进行变更。

Vaughn 强烈建议首先从第二条规则开始实施,让每个实体成为一个聚合根,不存在任何例外的情况。接下来再为该聚合添加所有字段与属性,以使该聚合在创建时保证处于某个有效的状态下。

Vaughn 所建议的下一步骤,是与领域专家进行协同工作,以找中哪些聚合是必须在同一个事务中进行变更的,以及哪些聚合是可以由某些变更进行触发的。Vaughn 在这里提出了一点警告,领域专家都倾向于声明所有实体都是必须在同一个事务中进行变更的,而这种情况其实并不多见,很有可能是由于这些专家之前的工作经验都是与数据库密集型系统打交道所导致的。

Vaughn 一直在寻找某种比对象- 关系/ 映射(ORM)框架更好的方法对聚合进行保存,他曾考虑以 JSON 格式对聚合进行序列化,并将结果保存在某个文档数据库中。在对领域事件进行操作时,这些事件必须在聚合进行变更时保存在同一个事务中,否则一旦存储机制出错,整个系统的数据就有可能产生不不一致。但使用文档数据库的一个问题在于,多数文档数据库都不支持 ACID 的事务功能,对于那些无法接受不一致的系统来说,这实际上就断绝了使用文档数据库的可能性。因此 Vaughn 转而寻找某种支持事务与 JSON 的数据存储系统,目前他所找到的一个产品是 PostgreSQL 9.4 的 beta 版本,他已在一些小型示例中成功地应用它作为聚合的存储机制了。

Vaughn 还撰写了关于《高效聚合设计》的一系列共三篇文章。

在早些时候, Julie Lerman 也在文章中介绍了如何在边界上下文之间共享数据的话题。

查看英文原文: Designing and Storing Aggregates in Domain-Driven Design

2014-12-18 04:223291
用户头像

发布了 428 篇内容, 共 190.6 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

第一章 作业

青葵

学习

产品经理训练营Week1作业

Mai

产品经理训练营第一课作业

Jobs

产品经理训练营

认识产品经理

夏天的风

产品经理

产品经理训练营第一章作业-G20210639010157

苏格图德

产品经理训练营

产品经理训练营-第一周作业

玖玖

极客大学产品经理训练营

智能对话系统产品经理岗位拆解

元二

认识产品经理-通过岗位模型了解自己的发展方向与空间20210119

WooBeyna

Dreamed Job?

顾远山

作业 极客大学产品经理训练营 Job Model

产品岗位对比&自身岗位

novaln🍉

产品岗位观察小结

庞玉坤

产品经理 产品经理训练营 极客大学认识产品经理 极客大学产品经理训练营

产品经理第0期训练营第一周作业提交

Krystal

产品训练营第一周作业

万顷湖天碧

产品经理训练营

产品经理训练营第一章作业

黑小白白白

极客大学产品经理训练营

终结代孕乱象,一场科技与黑产的赛跑

脑极体

类别型特征

IT蜗壳-Tango

机器学习 七日更

产品经理训练营第一周学习总结

月亮 😝

「年度总结」在字节跳动混了两年,然后呢?

Java架构师迁哥

第一周作业

戎帅

PM 第一次作业

郭栋

产品经理训练营

两行代码修复了解析MySQL8.x binlog错位的问题!!

冰河

MySQL 中间件 Binlog 二进制日志 数据异构

第一章 总结

青葵

学习笔记2

一文讲弄懂什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址

产品经理第一课作业

产品经理训练营

no.1 作业

郭栋

产品经理训练营

作业:项目经理岗位备忘录

顾庆隆

项目经理

产品经理岗位需求分布

jpcr987i

【作业-01】认识产品经理

西西里奇

产品经理 产品经理训练营

高情商与低情商:有效的沟通

北风

交流 情商

极客产品训练营第一课作业

HaoJi

产品经理训练营

Worktile 王涛的经营之道:7 年牵引式破局 | TGO 科技领袖三十人

李忠良

28天写作

在领域驱动设计中对聚合进行设计与存储_语言 & 开发_Jan Stenberg_InfoQ精选文章