ThoughtWorks 亢江妹&周宇刚 - DDD落地之BA和架构师的完美结对_部分1

2020-03-04 395浏览

  • 1.BA和Architect的完美结对 DDD Practice:BA and Architect Pairing 1
  • 2.初识领域驱动设计 第⼀一部分 运⽤用领域模型…… 第⼆二部分 模型驱动设计的构造块 第4章 分离领域 第5章 软件中所表示的模型 实体 值对象 第6章 领域对象的⽣生命周期 聚合根
 仓储(Repository) 第三部分 …… 2
  • 3.我以为领域驱动设计是这样 3
  • 4.4
  • 5.深⼊入领域驱动设计 第⼀一部分 …… 第⼆二部分 …… 第三部分 ……
 
 第四部分 战略略设计 第14章 保持模型的完整性
 通⽤用语⾔言 限界上下⽂文 5
  • 6.”对⼀一个⼤大型系统,领域模型的完全统⼀一将是不不可⾏行行 的或者不不划算的。“ —— Eric Evans 6
  • 7.DDD的构建块不不能盲⽬目地应⽤用在⼀一个⽆无 限⼤大的领域模型上,⼀一个⽆无限⼤大的领域模 型也⽆无助于我们开发出优质的软件,限界 上下⽂文是分解领域模型的关键 7
  • 8.边界 “限界上下⽂文是⼀一个单词或是⼀一个句句⼦子所出现的环境,这 个环境会反过来影响它们的含义” 8
  • 9.“最终,在与专家⼀一起⼯工作了了⼏几个⽉月……”
 —— the blue book 
 但我敢肯定不不是由开发者在屏幕前独⾃自空想出来的
 9
  • 10.从⼀一个例例⼦子开始 10
  • 11.“乐乐⼩小画笔” I
  • 12.在这样⼀一个场景下, 如果进⾏行行领域驱动设计, ⼤大家通常会怎么做? 12
  • 13.“乐乐⼩小画笔” I 乐乐 报名的⼈人太多了了,⼿手⼯工 处理理不不过来,能否更更⾼高 效? 聚焦问题 如何⾼高效地处理理报名?
  • 14.“乐乐⼩小画笔” I mobile & web ⽤用例例/⽤用户故事: • 乐乐发布报名表 • 家⻓长填写报名表,替孩⼦子报名乐乐画画班 • 家⻓长缴费以后,乐乐记录家⻓长缴费情况 My Profile & My Notifications
  • 15.“乐乐⼩小画笔” I 最“偷懒”的⽅方法 mobile & web 找出⽤用例例或⽤用户故事中的名词 • 乐乐发布报名表 • 家⻓长填写报名表,替孩⼦子报名乐乐画画班 • 家⻓长缴费以后,乐乐登记缴费记录 乐乐 家⻓长 报名表 缴费记录 画画班
  • 16.领域 报名上下⽂文 实体 值对象 值对象 实体/事件
  • 17.业务分析的过程: 理理清⽤用户诉求、需求的范围 有助于简化模型
  • 18.转眼过了了⼀一年年……. 18
  • 19.“乐乐⼩小画笔” II
  • 20.此时业务变复杂了了: 业务中 参与⽅方 1 主管乐乐 1 助理理欣欣 6 6位⽼老老师 ~500 数百位家⻓长 课程⻔门类 美术预科 适合2-3岁孩⼦子 从看、摸、闻、听、尝 培养艺术感; 书法 适合3-7岁孩⼦子, 学习字体结构、笔画线条; ⼉儿童绘本 适合年年龄5-10岁,⽤用⽂文字和 图画表达; 业务规范 每期课程8次,每周2次,⼀一个⽉月(4周)上完; 分为平时班和周末班;平时班周⼆二和周四晚上上课;周末班是周六或周⽇日上课; 每班最多12个孩⼦子; 每⽉月⽉月初开始新期课程,8次课结束后重新开始 ……
  • 21.“乐乐⼩小画笔” II 请为乐乐设计⼀一个⼯工具,能让乐乐⽅方便便地排课、管理理报名和课 堂质量量管理理,维护“⼩小画笔”的正常运营。 21
  • 22.1 - ⽤用户访谈,找出各⾃自最关⼼心的问题 主管乐乐 助理理欣欣 如何安排资源,⽅方便便地 排课,发布课程表信息? 如何招⽣生? 如何保证课程质量量和家 ⻓长⼝口碑碑? 如何⽅方便便地跟踪和管 理理报名? 如何⽅方便便跟踪缴费信 息及处理理退费? 学⽣生家⻓长 如何⽅方便便地查阅课程 信息并进⾏行行报名?
  • 23.2 - ⽤用户访谈:了了解当前的业务流程 课程发布 每期开课前 宣传推⼴广 报名登记 每期课程中 课程缴费 课堂签到 设计课程⻔门类 查看报名情况 乐乐 协调⽼老老师资源 发布课程表 每期课程后 课程评价 收⼊入统计 课程回访 查看当期收⼊入 记录家⻓长评价 和反馈 欣欣 家⻓长 制作宣传海海报 微信微博宣传 到社区宣传 短信通知⽼老老家⻓长 查看课程⽇日历 填写报名表 通知开课 提醒家⻓长缴费 家⻓长缴费 查看转账记录 核实钱款到账 登记缴费记录 课堂签到 XXX 没有⼯工具⽀支撑 XXX 有⼯工具⽀支撑
  • 24.3 - 找出核⼼心的业务问题 课程发布 每期开课前 宣传推⼴广 报名登记 下设⼀计一课期程⻔门的类 乐乐 课协程调⽼老老如师资何源 安排? 发布课程表 查看报名情况 每期课程中 课程缴费 课堂签到 每期课程后 课程评价 收⼊入统计 课程回访 查看当期收⼊入 如何获得反馈, 记录家保⻓长评证价课程质量量? 和反馈 制作宣传海海报 查看转账记录 课堂签到 微信微博宣传 核实钱款到账 欣欣 到社区宣传 如何让报名缴 短信通知⽼老老家⻓长 费提更通醒更知家⾼开⻓长高课缴效费 ? 登记缴费记录 查看课程⽇日历 家⻓长缴费 家⻓长 填写报名表 XXX 没有⼯工具⽀支撑 XXX 有⼯工具⽀支撑
  • 25.4 - 总结核⼼心业务问题 课程安排 报名缴费 课程评价 下⼀一期的课程如何安排? 如何⽅方便便地排课,发布课 程表信息? 如何更更⾼高效便便捷地管 理理管理理报名缴费? 如何获取课程反馈,保 证课程质量量和⼝口碑碑? 识别⼦子领域,限界上下⽂文就是⼦子领域功能和模型的边界
  • 26.限界上下⽂文的边界,也是 需求和模型的边界 26
  • 27.5 - 勾勒勒新的业务流程 课程发布 每期开课前 宣传推⼴广 报名登记 设计课程⻔门类 查看报名情况 乐乐 协调老师资源 发布课程表 每期课程中 课程缴费 课堂签到 每期课程后 课程评价 收⼊入统计 课程回访 查看当期收⼊入 记录家长评价 和反馈 欣欣 家⻓长 制作宣传海海报 微信微博宣传 到社区宣传 短信通知⽼老老家⻓长 查看课程⽇日历 填写报名表 通知开课 提醒家⻓长缴费 家⻓长缴费 查看转账记录 核实钱款到账 登记缴费记录 课堂签到 XXX XXX XXX XXX 没有⼯工具⽀支撑 已有⼯工具⽀支撑;或拟⽤用⼯工具⽀支撑 拟有⼯工具⽀支撑 拟有⼯工具⽀支撑
  • 28.此时,对模型好像开始有感觉了了……. 28
  • 29.6 - 排课领域 - 建模 每期开课前 课程发布 宣传推⼴广 设计课程⻔门类 乐乐 协调老师资源 发布课程表 制作宣传海海报 微信微博宣传 欣欣 到社区宣传 短信通知⽼老老家⻓长 家⻓长 实体 实体 服务 实体 实体
  • 30.7 - 报名缴费领域 - 建模 报名登记 查看报名情况 乐乐 课程缴费 欣欣 查看课程⽇日历 家⻓长 填写报名表 通知开课 提醒家⻓长缴费 家⻓长缴费 查看转账记录 核实钱款到账 登记缴费记录 值对象 实体 值对象 值对象 实体/事件
  • 31.8 - 课程评价领域 - 建模 课程评价 课程回访 乐乐 记录家长评价 和反馈 收⼊入统计 查看当期收⼊入 欣欣 家⻓长 值对象 实体/事件
  • 32.上下⽂文映射 报名缴费⼦子域 报名上下⽂文 课程安排⼦子域 课程安排上下⽂文 课堂评价上下⽂文 课堂评价⼦子域
  • 33.协作对业务领域的深⼊入分析 ⾃自然驱动出上下⽂文地图 1. ⽤用户访谈,梳理理⽤用户⽬目标 2. 了了解当前业务流程 3. 找出核⼼心业务问题 4. 勾勒勒未来业务流程 5. 识别出⼦子领域 6. 对⼦子领域,识别核⼼心领域对象 7. 做出Context Map 8. 校验功能地图和ContextMap是否对应 33
  • 34.34
  • 35.⼩小画笔I 如果客户希望以现⾦金金⽀支付订单, 乐乐会在报名单上添加⼀一笔缴费记录, 报名单的收款状态就会随之改变 35