实战化领域驱动设计工作坊

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 全球软件咨询公司 实战化领域驱动设计工作坊 概念讲解 (DDD China 2019 Conference) © ThoughtWorks 2019 1
2. 讲师团队 © ThoughtWorks 2019 胡皓 王岩 钟健鑫 朱海波 王瑞鹏 林宁 2
3. 为何需要领域驱动设计? © ThoughtWorks 2019 3
4. 现实世界的挑战 © ThoughtWorks 2019 4
5. 难以理解的代码 编程中最难的事情之一就是命名 © ThoughtWorks 2019 5
6. 混乱不堪的模型 拍脑袋建模 © ThoughtWorks 2019 6
7. 发散式变化 & 散弹式修改 依据变化的边界进行架构和编程——最简单也最困难 业务A 业务B 业务 业务C 模块 业务D 模块 模块 © ThoughtWorks 2019 模块 模块 模块 7
8. 大泥球架构 技术与业务不能匹配的最终结果 © ThoughtWorks 2019 8
9. 微服务压垮了最后一根稻草 从大泥球到分布式泥坑 © ThoughtWorks 2019 https://maveric-systems.com/blog/microservices-i-microservices-vs-soa 9
10. 领域驱动设计的诞生 © ThoughtWorks 2019 10
11. 领域驱动设计 从低调沉稳到日渐火爆 领域驱动 设计 持续完善 影响力持续增加 Eric Evans 2003 实现领域 驱动设计 … … Vaughn Vernon Martin Fowler James Lewis 2013 2014 事件风暴 Alberto Brandolini © ThoughtWorks 2019 微服务 架构 领域驱动设 计:模式、 原理与实践 领域驱动 设计精粹 Scott Millet Nick Tune Vaughn Vernon 2015 2016 微服务带来的架构复杂度成倍提升,引爆 了“技术和经验驱动设计”的顽疾。 数字化时代快速变化的典型特征,进一步 敲响了低响应力架构的丧钟。 11
12. 领域驱动设计解决问题的方式 © ThoughtWorks 2019 12
13. 分解大泥球 以子域、限界上下文为参考,通过聚合的方式进行建模 © ThoughtWorks 2019 https://p2p.wrox.com/book-patterns-principles-practices-domain-driven-design-789/ 13
14. DDD与传统设计方法的对比 需求文档 角色间相互推诿 技术实施细节 经验建模 混乱的词汇 面向技术进行架构 难以理解的代码 面向业务进行架构 代码即文档 大泥球架构 协同设计 各角色通力协作 聚焦业务问题 领域建模 统一语言 松耦合架构 © ThoughtWorks 2019 14
15. 聚合根 DDD是更有套路的设计方式 实体 值对象 领域服务 领域事件 业务抽象 决策命令 基于抽象业务 的参考 领域模型 工厂 仓库 领域名词 API设计 协作设计 统一语言 限界上下文 基于概念边界 的参考 上下文依赖关系 分层架构 核心域 问题域划分 支撑域 通用域 服务/模块/包拆分 基于投资优先级 的参考 资源分配策略 开发/集成策略 技术栈选择 团队分组/分工 © ThoughtWorks 2019 15
16. 核心原则 面向业务进行架构 © ThoughtWorks 2019 聚焦核心域 协作设计 统一语言 澄清问题域,聚焦核心 竞争力,优化资源投入 领域专家同软件专家通 过创造性协作,迭代式 的探索和发现模型 利用明确且有边界的业 务上下文统一语言 16
17. DDD在产品研发过程中的位置 Design Thinking + Domain Driven Design + DevOps © ThoughtWorks 2019 17
18. 如何开展领域驱动设计? © ThoughtWorks 2019 18
19. 分段式协作设计 © ThoughtWorks 2019 19
20. 统一语言 分段式协作设计 三个阶段 从问题出发,逐级抽象,层层深入和细化 ● 战略设计 ● 战术设计 战略设计 战术设计 技术实现 澄清业务与问题 建立抽象模型 深入实现细节 ● 技术实现 © ThoughtWorks 2019 20
21. 分段式协作设计 战略设计阶段 多说问题,少说方案  业务梳理和抽象  限界上下文识别  子域识别 © ThoughtWorks 2019 21
22. 分段式协作设计 战术设计阶段 持续抽象,忽略技术细节  领域建模  业务服务识别  业务服务API能力识别 © ThoughtWorks 2019 22
23. 分段式协作设计 技术实现阶段 一切皆是细节  API详细设计  UML设计  数据库设计  部署与运维  …… © ThoughtWorks 2019 23
24. 如何实现领域驱动设计? © ThoughtWorks 2019 24
25. 松耦合架构 © ThoughtWorks 2019 25
26. 微服务设计 以业务边界为参考,实现架构与业务对齐 © ThoughtWorks 2019 https://maveric-systems.com/blog/microservices-i-microservices-vs-soa 26
27. 分层架构设计 以领域为核心,以变化的原因和聚合为边界,提供分层守护 https://maveric-systems.com/blog/microservices-i-microservices-vs-soa © ThoughtWorks 2019 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html 27
28. 代码实现样例 Talk is cheep, show me the code. https://github.com/howiehu/ddd-architecture-samples © ThoughtWorks 2019 28
29. 工作坊开始 通过假想的业务实际操作和体验领域驱动设计 © ThoughtWorks 2019 29
30. 一个简单粗暴的需求 嘿!我是你们的老板!我很有钱!我需要做一个产品干掉市场上那些 倒霉的外卖产品! 30
31. 电梯演讲 (Elevator Pitch) ● 使用便利贴在白纸上贴出电梯演讲的结构。 ● 每个人为电梯演讲的每一行想象一个内容,通过 ● 便利贴的方式进行书写(每个人应该写出7个便 WHO [ statement of the need or opportunity ] 利贴)。 THE [ product name ] 每个人将自己的7个便利贴放在白纸上相应的位 置,共同阅读并讨论以形成共同意见,让电梯演 讲看上去更有吸引力,更可行且更通顺,必要的 时候可以采取投票等方式达成一致(这只是一个 练习,所以大家开心优于纠结??)。 ● FOR [ target customer ] 利用便利贴修改并调整电梯演讲到最终结果,然 后每组将自己的电梯演讲分享给大家。 IS A [ product category ] THAT [ key benefit, compelling reason to use ] UN LIKE [ primary competitive alternative ] OUR PRODUCT [ statement of primary differentiation ]. 31
32. 数字化架构能力小组 咨询 BU dac@thoughtworks.com | thoughtworks.com © ThoughtWorks 2019 32

trang chủ - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.3. UTC+08:00, 2024-11-28 19:49
浙ICP备14020137号-1 $bản đồ khách truy cập$