大白话聊聊DDD
如果无法正常显示,请先停止浏览器的去广告插件。
1. 大白话聊聊DDD
孟繁茂/机票目的地事业群
2. 01 大白话聊DDD到底是什么?
CONTENTS 目录
02 大白话聊聊DDD常见术语
03 DDD一般是怎么玩的?
3. 一、大白话聊DDD到底是什么?
01 什么是DDD?
02 DDD Before Vs DDD After?
4. 1、什么是DDD?
What is Domain-Driven Design?
Domain
领域
Driven
驱动
领域驱动
数据驱动
自底向上
关注数据来实现功能
Design
设计
VS
自顶向下
关注业务活动
5. 2、DDD Before
数据驱动开发
6. 2、DDD Before
7. 2、DDD After
8. 2、DDD After
战略设计
9. 2、DDD After
战术设计
10. 2、一个复杂的业务系统 DDD Before Vs After
DDD Before N年后
“ 大泥球“似的系统
DDD Before N年后
”整洁“的系统
11. 二、大白话聊聊DDD的各种术语
01 战略设计是什么鬼,在搞什么?
02 战术设计是什么鬼,在搞什么?
12. 1、战略设计是什么鬼,在搞什么?
官方解释:在某个领域,核心围绕上下文的设计。
主要关注上下文的划分、上下文映射的设计、通用语言的定义
上下文划分
Bounded Context
上下文映射
Context Map
上下文通用语言
Ubiquitous Language
白话解释:在某个系统,核心围绕子系统的设计。
主要关注系统的划分、交互方式、系统内的核心术语定义
系统的划分
交互方式
系统内的核心术语
13. 战略设计在搞什么?
14. 举个例子:战略设计盖房子
问题1:盖什么样的房子?
农家院
问题2:农家院应该盖几间房子,每
间房子大小,作用,此时该怎么办?
找领域专家,即在领域内具有丰富知识和经验
的人,与他咨询、讨论。
盖房子的工程师和领域专家讨论
15. “战略设计”房子
16. 1、战术设计是什么鬼?
官方:核心关注上下文中的实体建模,定义值对象、实体等,更偏向开发细节。
白话:核心关注某个子系统的代码实现,以面向对象的思维设计类的属性和方法。
实体建模 Model Driven Design
值对象
Value Object 实体
Entity 聚合
Aggregates
工厂
Factories 仓库
Repositories 领域服务/事件
Service/Event
17. 战术设计的术语:实体
官方解释:实体是指描述了领域中唯一的且可持续变化的抽象模型。通常建模时,
名词用于给概念命名,形容词用于描述这些概念,而动词则表示可以完成的操作。
白话解释:实体就是对象的方法和属性实现业务逻辑的类,一般由唯一标识id和
值对象组成,属性发生改变,可以影响类的状态和逻辑。
18. 4、举个例子:理解什么是实体 (Entity)
社交领域
存在具备实体特征的事物
唯一标识
可变性和有状态 角色和职责
19. 举个例子 :理解什么是值对象 (Value Object)
官方解释:描述了领域中的一件东西,将不同的相关属性组合成了一个概念整体,
当度量和描述改变时,可以用另外一个值对象予以替换,属性判等、固定不变。
白话解释:不关心唯一性,具有校验逻辑、等值判断逻辑,只关心值的类。
地址值对象
20. 3、战术设计的术语:聚合
官方解释:实体和值对象会形成聚合,每个聚合
一般是在一个事务中操作,一般都有持久化操
作。聚合中,根实体的生命周期决定了聚合整
体的生命周期。
白话解释:就是对象之间的关联,只是规定了关联
对象规则,操作聚合时,类似于操作Hibernate中
的One-Many对象的概念。
21. 举个例子 :聚合
22. 举个例子 :工厂和仓库
23. 三、 DDD一般是怎么玩的?
01 DDD一般是怎么玩的?
02 小试牛刀,尝试一下DDD设计
03 DDD与架构
24. 1、DDD一般是怎么玩的?
25. 1、DDD一般是怎么玩的:
战略和战术设计目标回顾
Subdomain
核心子域
限界上下文划分
Bounded Context
通用语言定义
Ubiquitous Language
领域建模
Domain Model
战略:上下文设计
Domain Context
Design
上下文映射关系
Context Map
战术:领域实体建模
Model Driven Design
实体 Entity
值对象 Value Object
Subdomain
支撑子域
限界上下文划分
Bounded Context
通用语言定义
Ubiquitous Language
领域建模
Domain Model
聚合 Aggregates
工厂 Factories
仓库 Repositories
领域服务/事件
Service/Event
26. 1、 DDD一般是怎么玩的:战略和战术设计常用方法
《Java Modeling In Color With UML》
UML
https://www.eventstorming.com/
https://domainstorytelling.org/
27. 1、 DDD一般是怎么玩的:战略和战术设计常用方法
四色建模法
用例分析法
28. 事件风暴法
领域故事讲述法
29. 其他方法:ContextMapper 、DDD DSL、Context Canvas
30. 2、小试牛刀:使用“领域故事讲述法” 进行DDD设计
31. 2、 小试牛刀:使用领域故事讲述法设计
Domain (领域):电商-在线下单购买商品
Actors(参与者):用户、电商系统、仓储人员、物流人员、银行系统
Work Object(功能点和业务概念):商品、商品列表、订单列表、支付
结果、支付数据等
Activity(业务活动或行为 ):搜索商品,选择商品,支付,发货,送货等
32. 2、Domain Story Telling进行战略设计:上下文分析
33. Domain Story Telling进行战略设计:上下文分析
34. 2、Domain Story Telling进行战略设计: 上下文分析
35. 2、Domain Story Telling进行战术设计:领域实体建模分析
订单领域—实体设计
36. 2、Domain Story Telling进行战术设计:领域实体建模分析
订单领域—值对象设计
37. 2、Domain Story Telling进行战术设计:领域实体建模分析
订单领域—聚合设计
38. 2、Domain Story Telling 最终设计结果
39. 3、DDD与架构:分层架构
40. 3、DDD与架构:分层架构
41. 3、DDD与架构:分层架构-查询商品请求示例
用
户
接
口
层
42. 应
用
层
43. 3、DDD与架构:分层架构-查询商品请求示例
领
域
层
44. 3、DDD与架构:分层架构-查询商品请求示例
基
础
设
施
层
45. 3、DDD与架构:六边形/洋葱/CQRS
46. 3、DDD与架构
47. 小结
一、大白话聊聊DDD的各种术语
什么是DDD?
DDD Before Vs DDD After?
三、 DDD一般是怎么玩的?
DDD一般是怎么玩的?
小试牛刀,尝试一下DDD设计
DDD与架构
二、大白话聊聊DDD的各种术语
战略设计是什么鬼,在搞什么?
战术设计是什么鬼,在搞什么?
48. 欢迎QT扫码入群交流讨论:
49. 请扫码填写评价