DDD 建模中的主/客体思维

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1.
2. DDD 建模中的主/客体思维 ThoughtWorks 林宁 nlin@thoughtworks.com
3. 关于我 网名“少个分号” 一线程序员、咨询师 做过大概 30+ 场的建模工作坊 公众号 个人微信
4. 灵魂一问 充血模型好用吗?
5. 充血模型 如果 checkout 需要其他领域对象怎么办? 如果需要批量处理怎么办? 用户审计怎么做? ……
6. 如果是这样呢? 在结账的场景下: Cashier 是主体 Order 以及其他对象是客体
7. 应用软件设计是对现实的建模 把行为给予主体是一种直观的方式。
8. OOP的陷阱 但是也容易掉进陷阱! DDD 是面向对象的延伸,面向对象是对现实的建模, 如果我们对现实认识足够,就能设计好软件。 § 可以自己结账的订单 § 可以自己发送的邮件 § 可以自己扣减的账户
9. 认识主体和客体 主体是有认识能力和实践 能力的人,或者,是在社 会实践中认识世界、改造 世界的人。 客体是实践和认识活动所指向的 对象,是存在于主体之外的客观 事物。
10. 主体和客体的相对性
11. 软件设计中的主客体 场景 主体 客体 产品定位 用户 软件 建模 架构师 业务、软件模型 具体编码 服务对象 被操作的实体
12. 主体和客体原则 主客体是动态的 主客体可能是集合 主客体分析和场景有关 避免自我代入
13. 再谈建模 当我们谈建模我们在谈什么?
14. 没有合适模型的房子 *漫画来自苏南
15. 建模就是寻找 “软件的骨相” 不稳定、修改成本低、人员要求低 设计师 软件的皮 软件的交互 程序员 软件的肉 软件的业务逻辑 架构师 软件的骨 软件的模型和架构 产品经理 软件的魂 软件背后的生意 稳定、变更成本高、人员要求高
16. 模型是什么? “通常,模型是对对象、人或系统的信息表示。它通过较为简单的信息结构来代表 我们需要理解的复杂事物或系统。”—— https://domain-driven-design.org
17. 计算机中的模型 形式语言 自然语言 业务逻 辑 抽象 架构师 领域对 象 流程图 DDD 原型图 UML PRD 文档 E-R 业务模型 领域模型 程序员 高级编 程语言 编译器 汇编 CPU 微指令 加法器 电气信 号 OOP 具体 FP 编程模型 计算(图灵) 模型 数理逻辑 模型 电气模型
18. 建模实践 对主体建用例 对客体建模 使用用例维度画流程图 持续建模
19. “少谈些主义,多解决问题”
20. 问题一,你的软件为谁设计的? ü 目标用户群体 ü 诉求或痛点 ü 产品名称 ü 产品特征 ü 不可抗拒的优点 ü 其它竞品 ü 核心的差异化竞争力 *模板提供:https://beeart.hello-bees.com/
21. 问题二,应该给对象充血吗? OrderService 主体 OrderController 主体 客体 原则:主体充血,客体贫血 OrderEnity 客体
22. 问题三,复用还是冗余? UserManagementC ontroller RegisterRequest RegisterResponse UserService UserController AddUserRequest AddUserResponse 原则:注意客体真的相同吗? UserEnity
23. 问题四,DDD 每层都在做什么? 主体 接入层 应用层 领域层 Handler、Controller Application service Domain service 基础设施层 Repository 客体 XML、JSON、HTML Data Use case DTO Model or Enity Generic perisit object
24. 问题五,如何给方法取个好名字? 主语 + 谓语 + 宾语 + 补语 = 句子 主体 + 方法名 + 参数 = 语句 I bought a big house. orderService.buy(house); 原则:主体拟人,客体拟物
25. 问题六,如何持久化对象? 1. 聚合为单位持久化 2. 聚合尽可能小 3. 使用领域服务维护领域一致性 class 4. 以聚合为单位缓存数据 class 5. 上下文内强 ACID 一致性,上下文之间 class 最终一致性 6. 降低范式,第三或者第二范式 ORM 7. 性能需求越高,越免高范式 8. 以聚合为单位处理业务一致性,而不是 以聚合为单位持久化(整存整取) 原则:持久化本质是客体形式变化了
26. 问题七,多对多问题 Document Document N Participant N User User 原则:用客体来分析隐藏的模型
27. 问题八,理解值对象 - 类型 地址库地址 实体 用户地址 实体 XXXService ? OrderAddress 物流中地址 值对象 原则:值对象是无独立生命周期的实体
28. 问题九,思考题 用户登录场景主客体是什么?
29. 有没有具体的建模方法?
30. 建模方法 Event storming Color Modeling 事件风暴 四色建模 Actor modeling Data-flow diagram 用例建模 DFD 建模
31. 事件风暴工作坊 寻找事件 寻找命令 寻找执行者 吵架 吵架 吵架 得到模型
32. 事件风暴工作坊
33. 事件风暴工作坊的逻辑 逻辑视角 主体 + 行为 + 客体 = 现象 业务视角 角色 + 操作 + 特性 = 用例 Event Storming 执行者 + 命令 + 模型 = 事件 Event Storming 做出一个假设,假设事件是很容易找到的。 【执行者】发起了【命令】,产生了【事件】,导致【领域模型】的状态变化了。
34. 事件风暴工作坊流程 1. 产品愿景,识别软件价值和定位 2. 场景梳理,对业务的领域划分,以便能聚焦核心域 3. 事件风暴,察业务系统变化的关键帧,找出系统状态的变化规律。 4. 命令风暴,找出系统状态的触发者和行为。 5. 模型识别,获得领域模型,了解系统的骨相 6. 上下文划分,分解问题,战略规划整个系统 7. 模型展开,设计聚合和属性,战术落地具体实现 8. 可视化输出,输出为可以继续使用的 UML 图例
35. 吵架的过程必不可少
36. 概念的统一 概念的内涵是反映的事物的特有属性。 白马非马 概念的外延是概念所反映的特有属性的事物。 用概念之间的关系来定义和理解概念。
37. 概念的统一
38.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-26 13:28
浙ICP备14020137号-1 $Map of visitor$