12 | 领域建模:如何用事件风暴构建领域模型?
12 | 领域建模:如何用事件风暴构建领域模型?
讲述:欧创新
时长16:06大小11.04M
事件风暴需要准备些什么?
1. 事件风暴的参与者
2. 事件风暴要准备的材料
3. 事件风暴的场地
4. 事件风暴分析的关注点
如何用事件风暴构建领域模型?
1. 产品愿景
2. 业务场景分析
3. 领域建模
4. 微服务拆分与设计
总结
思考题
赞 25
提建议
精选留言(78)
- 醇梨子2019-12-31我觉得 像这种东西,你理论写的再多,也没什么实践意义,人类天生具备的能力就是模仿,市面上培训DDD的东西那么多,公司那么多,为什么最后还是做不了DDD? 像这种东西,你何不从头就引入 一个业务场景,哪怕不大的,从前到后 拆解出来,比你写这种理论 写一万篇都有用,我说实话,我所有都看完了,除了一些概念,我真的学会领域建模了?共 22 条评论164
- Dwan2019-11-11DDD: 事件风暴--产品愿景--场景分析--领域建模--微服务拆分与设计。 传统: 产品需求--需求分析--详细设计--ER模型--UML设计 貌似最后都能产生模型图,一个叫领域模型,一个叫ER图,是不是关键就在这里,一个是面向业务领域建模,一个是面向底层数据层设计,也是DDD和传统的分水岭?
作者回复: 是这个意思。DDD领域建模优先,领域建模的时基本不考虑数据模型和数据库实现。在微服务具体落地的时候才考虑数据实体的设计。
共 5 条评论45 - 伊来温2020-06-29有个问题请教下,商品的收藏功能,应该被划分在用户上下文呢还是商品上下文。感觉语意上两边都是通的
作者回复: 根据单一职责的设计原则,用户上下文应该只负责用户相关的管理职能。商品的收藏虽然跟用户关联,但应该属于商品上下文,商品上下文内可能会有商品目录聚合和商品收藏聚合等。在设计时,你可以将收藏的商品与用户ID建立关联就可以了,用户ID是值对象。用户登录时,可以根据用户ID查询到匹配的商品收藏清单。
共 4 条评论15 - suke2020-06-27做微服务拆分为什么还要叫上产品、测试,和项目经理,他们的发言有用么 我就想问
作者回复: 领域建模的过程不光是建立一个领域模型,更关键的是建立团队通用语言的过程。所以需要团队成员尽早参与,后面开发和测试就会容易很多,也不会出现方向偏离。
共 4 条评论9 - Harris2020-01-05个人理解领域建模的核心是识别出领域模型并做到“高内聚,低耦合”;最后一步微服务拆分与设计并不一定是一定要微服务,可以是一个模块、一个包等等。
作者回复: 是这样的,其实DDD刚出来的时候并不是为微服务设计的。你可以根据自己得需要,做好领域建模和划分好边界,刚开始并不一定要拆的很细,等真正需要拆分的时候再拆,用DDD设计的系统很容易解耦,很容易拆分出微服务来的。
9 - 张迪2019-11-14看着这个划分的领域,完全不知道怎么落地。
作者回复: 有什么疑问,咱们可以谈讨哈。
共 4 条评论8 - myking2020-10-07老师能不能用把ddd带入到rbac的实战设计里面去?我感觉这个和订单比起来设计到的聚合根的选择更复杂的多,比如是不是应该有userRole的聚合根、roleMenu的聚合根。事件有删除menu删除role等等。在这种情况下应该如何处理呢
作者回复: 这个需要根据您的业务场景来具体分析。我试着来分析一下。一般来说在用户权限体系里,会有User、Role等聚合,其中Role作为聚合根,会引用Menu实体,建立role的菜单权限体系。User和Role聚合主要用于管理用户以及角色等基础信息,比如用户的增删改查,删除Role中的菜单权限,删除Role等基本操作。 在进行用户权限配置时会有另外一个聚合UserRole,这个聚合的聚合根引用用户值对象和Role值对象,在这个聚合管理用户的角色权限配置,建立User和Role之间的关联。
共 5 条评论7 - Tan2019-12-23欧老师好,请教个问题: 信贷风控系统,客户提交申请信息,根据客户信息查几十个第三方信息(征信报告、欺诈分、企查查...)来获取客户相关信息然后放到规则引擎跑规则,最后算出客户授信金额。感觉这个系统一时半会没发下手划分领域和子域,麻烦老师指点一下,谢谢!
作者回复: 你说的这个场景不是富领域模型,可能找不出聚合根,因此不适合用聚合的方式来做。但是你可以用DDD的分层架构来划分不同的服务,按照外层依赖内层服务的调用关系来开发。
共 3 条评论5 - marker2019-11-13老师,能给我们说说四色建模或彩色建模?
作者回复: 这一块研究的还不太深入呢。后面我再研究一下。
5 - 睁眼看世界2019-11-12老师,学习到这里还是云里雾里,感觉学了一大堆概念,有个DDD这个理念。公司一般都是需求驱动,很少会花费大量精力去领域建模。老师,请问你们具体是如何推动DDD落地的?
作者回复: 领域建模的目的是为了微服务的设计,领域模型是开始,DDD是一种不同于传统设计的方法 ,先有领域模型,然后才有微服务设计,这样设计的微服务边界很清晰,而不是靠拍脑袋设计微服务。等学完后面全部DDD的内容后,你就知道其中的奥秘了。
共 3 条评论4 - Geek_75d94a2020-07-09学完感觉还是一脸懵逼,很多时候不知道哪些事件应该挂在哪个实体下面。像是一个团队里面,存在队长和队员,只有队长可以解散团队。那么解散团队这个操作,是放在团队实体上,还是队长实体上?
作者回复: 事件是独立的,一些操作发生后会产生事件,事件主要用于上下游业务的数据流转和领域模型和微服务解耦,不用挂到某个实体下面。团队的管理在聚合根,聚合根的有些职能会拿出来放到工厂和仓储里面,比如聚合实体的初始化,聚合数据的持久化。解散团队的操作当然在聚合根实体。
2 - learn more2022-05-04构建领域模型的过程和敏捷开发的故事拆分非常接近,尤其使用了看板、便利贴以后,简直就是同一套方法论,不同的语言表达而已。1
- 徐李2021-12-16事件风暴,就是把团队的人都召集起来,大家头脑风暴,各抒己见,然后汇总得出领域模型,限界上下文,实体,值对象,命令等。1
- jiankang2021-08-31我觉得不少同学还是本着技术思维学习,具体讲是用确定的技术手段去解决确定的业务需求。 而DDD是一种思想,或者说是一种解决问题的方法论, 在这种方法论的指导下,大概率不会跑偏。1
- 李二木2020-11-26DDD 适合敏捷开发吗?项目初期需求不是那么明确。都是在迭代中完善的。
作者回复: 有没有觉得事件风暴的过程有点像敏捷开发的模式所提倡的方式。DDD的开发和设计非常适合敏捷开发,而且用DDD拆分出的微服务就可以很好的适合2-pizza团队的敏捷开发模式。
1 - suke2020-06-27怪不得ddd不好落地,且不说学习ddd付出的成本。一个领域建模要2周?还要叫上这么多人开会讨论 产出结果 可想效率之低
作者回复: 两周的时间基本上领域模型和微服务的所有设计就作完了,剩下的事情只是功能级的开发。通过一起领域建模,大家基本都了解到了所有的设计过程和实现细节,建立了统一语言,磨刀不误砍柴工,后面开发的工作就很容易了,所以效率并不会比传统的开发方式低。
共 3 条评论1 - 小谢同学2020-02-17有几个问题想请教下老师: 1. 中台类的项目通常是否也需要不断的迭代优化? 2. 假设要做一个2b的中台项目,集合ddd与敏捷开发,是否可以先根据用户旅程来遍历业务细节找出所有领域对象,最终按照ddd战略设计完成mvp产品的领域建模和限界上下文划分,这时候引入用户故事根据每一个边界内的聚合进行发布计划与迭代开发? 3. ddd与敏捷的融合,我认为有很多实践可以复用,例如白板、站会、用户旅程、工作坊,而到了战术设计阶段完全可以借用极限编程与精益的思想,比如引入结对编程,避免浪费等等,这样理解是否正确?谢谢展开
作者回复: 领域模型不会一成不变的,所以项目也会不断迭代。 敏捷和DDD结合会是未来的趋势,理解后你可以将它们灵活组合来用。
1 - 西野2019-11-28老师请教一下,领域服务和应用服务的区别是什么??
作者回复: 建议你看一下第7节。DDD分层架构:有效降低层与层之间的依赖。里面有详细介绍。
1 - miniluo2019-11-12ddd从我做起1
- 北天魔狼2019-11-12感觉最近要做的聚合交易项目就可以小试一下,老师已经列过类和方法名称,对照上下文和聚合可以照着葫芦画瓢了。现行项目不准备也没必要微服务,但是可以写好代码
作者回复: 走两次就大概知道怎么去做了。理解了理念以后,就不必受一些条条框框的限制了,路是自己慢慢趟出来的,选择最适合自己的方式。
共 4 条评论1