DDD 实战课
欧创新
人保资深架构师
55517 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 26 讲
开篇词 (1讲)
DDD 实战课
15
15
1.0x
00:00/00:00
登录|注册

12 | 领域建模:如何用事件风暴构建领域模型?

服务的粒度、分层、边界划分、依赖关系和集成关系
考虑非业务因素
根据场景分析过程中产生的领域对象
探索领域中的典型场景
从用户视角出发
对产品顶层价值的设计
足够长的墙和大空间
胶带或磁扣
水笔
即时贴
项目团队成员
领域专家
完成领域建模
快速分析和分解复杂的业务领域
标注出命令发起方的角色
标注出导致事件的命令
整合形成最终的领域事件集合
罗列出领域中所有的领域事件
领域专家与项目团队通过头脑风暴的形式
试着用事件风暴来构建一个你擅长的业务领域的领域模型
DDD的核心设计思想是先有边界清晰的领域模型,才能设计出清晰的微服务边界
领域建模时间成本可以视情况降低
团队成员全员参与领域建模对后续微服务设计与开发有帮助
事件风暴是一种不同于传统需求分析和系统设计的方法
微服务拆分与设计
领域建模
业务场景分析
产品愿景
分析业务动作或行为触发关系
业务语言和行为
场地
材料
参与者
方法
目的
团队活动
思考题
总结
构建领域模型
事件风暴分析的关注点
事件风暴的准备
事件风暴
领域建模:如何用事件风暴构建领域模型?

该思维导图由 AI 生成,仅供参考

你好,我是欧创新。
还记得我在 [第 01 讲] 中说过,微服务设计为什么要选择 DDD 吗?其中有一个非常重要的原因,就是采用 DDD 方法建立的领域模型,可以清晰地划分微服务的逻辑边界和物理边界。可以说,在 DDD 的实践中,好的领域模型直接关乎微服务的设计水平。因此,我认为 DDD 的战略设计是比战术设计更为重要的,也正是这个原因,我们的内容会更侧重于战略设计。
那么我们该采用什么样的方法,才能从错综复杂的业务领域中分析并构建领域模型呢?
它就是我在前面多次提到的事件风暴。事件风暴是一项团队活动,领域专家与项目团队通过头脑风暴的形式,罗列出领域中所有的领域事件,整合之后形成最终的领域事件集合,然后对每一个事件,标注出导致该事件的命令,再为每一个事件标注出命令发起方的角色。命令可以是用户发起,也可以是第三方系统调用或者定时器触发等,最后对事件进行分类,整理出实体、聚合、聚合根以及限界上下文。而事件风暴正是 DDD 战略设计中经常使用的一种方法,它可以快速分析和分解复杂的业务领域,完成领域建模
那到底怎么做事件风暴呢?事件风暴需要提前准备些什么?又如何用事件风暴来构建领域模型呢?今天我们就来重点解决这些问题,深入了解事件风暴的全过程。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

领域建模在微服务设计中扮演着至关重要的角色,而事件风暴作为一种团队活动方法,能够帮助团队快速分析和分解复杂的业务领域,完成领域建模。本文深入介绍了事件风暴的参与者、准备材料、场地和分析关注点,以及如何用事件风暴构建领域模型的过程。通过产品愿景和业务场景分析,事件风暴参与者可以将领域模型设计出来,为微服务的设计提供清晰的逻辑边界和物理边界。此外,文章还强调了领域建模的重要性,指出团队成员全员参与领域建模对于后续微服务设计与开发的帮助,并提出了对于初次学习DDD的开发人员可能存在的误解。文章以深入浅出的方式介绍了事件风暴的全过程,对于想要了解如何用事件风暴构建领域模型的读者来说,是一份有价值的技术指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《DDD 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(81)

  • 最新
  • 精选
  • Dwan
    DDD: 事件风暴--产品愿景--场景分析--领域建模--微服务拆分与设计。 传统: 产品需求--需求分析--详细设计--ER模型--UML设计 貌似最后都能产生模型图,一个叫领域模型,一个叫ER图,是不是关键就在这里,一个是面向业务领域建模,一个是面向底层数据层设计,也是DDD和传统的分水岭?

    作者回复: 是这个意思。DDD领域建模优先,领域建模的时基本不考虑数据模型和数据库实现。在微服务具体落地的时候才考虑数据实体的设计。

    2019-11-11
    6
    48
  • 伊来温
    有个问题请教下,商品的收藏功能,应该被划分在用户上下文呢还是商品上下文。感觉语意上两边都是通的

    作者回复: 根据单一职责的设计原则,用户上下文应该只负责用户相关的管理职能。商品的收藏虽然跟用户关联,但应该属于商品上下文,商品上下文内可能会有商品目录聚合和商品收藏聚合等。在设计时,你可以将收藏的商品与用户ID建立关联就可以了,用户ID是值对象。用户登录时,可以根据用户ID查询到匹配的商品收藏清单。

    2020-06-29
    6
    15
  • Harris
    个人理解领域建模的核心是识别出领域模型并做到“高内聚,低耦合”;最后一步微服务拆分与设计并不一定是一定要微服务,可以是一个模块、一个包等等。

    作者回复: 是这样的,其实DDD刚出来的时候并不是为微服务设计的。你可以根据自己得需要,做好领域建模和划分好边界,刚开始并不一定要拆的很细,等真正需要拆分的时候再拆,用DDD设计的系统很容易解耦,很容易拆分出微服务来的。

    2020-01-05
    10
  • suke
    做微服务拆分为什么还要叫上产品、测试,和项目经理,他们的发言有用么 我就想问

    作者回复: 领域建模的过程不光是建立一个领域模型,更关键的是建立团队通用语言的过程。所以需要团队成员尽早参与,后面开发和测试就会容易很多,也不会出现方向偏离。

    2020-06-27
    4
    9
  • myking
    老师能不能用把ddd带入到rbac的实战设计里面去?我感觉这个和订单比起来设计到的聚合根的选择更复杂的多,比如是不是应该有userRole的聚合根、roleMenu的聚合根。事件有删除menu删除role等等。在这种情况下应该如何处理呢

    作者回复: 这个需要根据您的业务场景来具体分析。我试着来分析一下。一般来说在用户权限体系里,会有User、Role等聚合,其中Role作为聚合根,会引用Menu实体,建立role的菜单权限体系。User和Role聚合主要用于管理用户以及角色等基础信息,比如用户的增删改查,删除Role中的菜单权限,删除Role等基本操作。 在进行用户权限配置时会有另外一个聚合UserRole,这个聚合的聚合根引用用户值对象和Role值对象,在这个聚合管理用户的角色权限配置,建立User和Role之间的关联。

    2020-10-07
    5
    8
  • hunter
    看着这个划分的领域,完全不知道怎么落地。

    作者回复: 有什么疑问,咱们可以谈讨哈。

    2019-11-14
    6
    8
  • Tan
    欧老师好,请教个问题: 信贷风控系统,客户提交申请信息,根据客户信息查几十个第三方信息(征信报告、欺诈分、企查查...)来获取客户相关信息然后放到规则引擎跑规则,最后算出客户授信金额。感觉这个系统一时半会没发下手划分领域和子域,麻烦老师指点一下,谢谢!

    作者回复: 你说的这个场景不是富领域模型,可能找不出聚合根,因此不适合用聚合的方式来做。但是你可以用DDD的分层架构来划分不同的服务,按照外层依赖内层服务的调用关系来开发。

    2019-12-23
    3
    6
  • marker
    老师,能给我们说说四色建模或彩色建模?

    作者回复: 这一块研究的还不太深入呢。后面我再研究一下。

    2019-11-13
    5
  • 睁眼看世界
    老师,学习到这里还是云里雾里,感觉学了一大堆概念,有个DDD这个理念。公司一般都是需求驱动,很少会花费大量精力去领域建模。老师,请问你们具体是如何推动DDD落地的?

    作者回复: 领域建模的目的是为了微服务的设计,领域模型是开始,DDD是一种不同于传统设计的方法 ,先有领域模型,然后才有微服务设计,这样设计的微服务边界很清晰,而不是靠拍脑袋设计微服务。等学完后面全部DDD的内容后,你就知道其中的奥秘了。

    2019-11-12
    3
    4
  • Geek_75d94a
    学完感觉还是一脸懵逼,很多时候不知道哪些事件应该挂在哪个实体下面。像是一个团队里面,存在队长和队员,只有队长可以解散团队。那么解散团队这个操作,是放在团队实体上,还是队长实体上?

    作者回复: 事件是独立的,一些操作发生后会产生事件,事件主要用于上下游业务的数据流转和领域模型和微服务解耦,不用挂到某个实体下面。团队的管理在聚合根,聚合根的有些职能会拿出来放到工厂和仓储里面,比如聚合实体的初始化,聚合数据的持久化。解散团队的操作当然在聚合根实体。

    2020-07-09
    2
收起评论
显示
设置
留言
81
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部