写点什么

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

  • 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:223262
用户头像

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

关注

评论

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

第四周总结

Geek_5d0795

极客大学架构师训练营

用100行代码手写一个Hystrix

小眼睛聊技术

Java 架构 高可用 设计 后端

架构师训练营第四周-系统架构综述

草原上的奔跑

Week4 作业

Shawn

大型系统常用的技术方案和技术手段

imicode

互联网系统架构总结

周冬辉

第四周课程总结

考尔菲德

一个典型的大型互联网应用系统使用哪些技术方案和手段

李锦

极客大学架构师训练营

维基百科(Wikipedia)网站架构设计分析

架构5班杨娟Jessie

极客大学架构师训练营

小师妹学JVM之:逃逸分析和TLAB

程序那些事

Java JVM TLAB 逃逸分析 签约计划第二季

做产品少走弯路:你需要懂点高阶的知识

我是IT民工

产品 管理 知识体系

架构师第四周学习总结

傻傻的帅

week04 互联网架构发展学习总结

李锦

大型互联网应用系统技术方案和手段总结

CATTY

互联网

架构师训练营 week03 作业

尔东雨田

极客大学架构师训练营

云计算 “拍了拍” Serverless

零度

云计算 Serverless 互联网 计算机

week4总结---系统架构

Geek_z9dmvw

架构师训练营」第 4 周作业

edd

【微信聊天】5张图帮你看懂二分查找

Java小咖秀

Java 算法 漫画 二分查找

通俗易懂的 Deno 入门教程

阿宝哥

typescript 大前端 deno

DevOps研发模式下「产品质量度量」方案实践

狂师

DevOps 研发管理 研发效能 开发流程

浅谈互联网系统架构

鲁米

深入浅出Shiro系列——权限认证

程序员的时光

权限系统

Week04 作业

极客大学架构师训练营

中国未来需要什么样的人才?机遇与挑战!

CECBC

CECBC 中国人才 中国脊梁 数字经济

【极客大学】【架构师训练营】【第四周】典型大型互联网应用系统的技术方案和手段

NieXY

极客大学架构师训练营

大型互联网应用系统的技术方案和手段(训练营第四课)

看山是山

分布式 微服务 极客大学架构师训练营

架构师训练营 week03 总结

尔东雨田

极客大学架构师训练营

架构师训练营第四周作业

一剑

架构师第四周作业

傻傻的帅

重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」

小傅哥

Java 设计模式 小傅哥 代码优化 观察者模式

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