机票辅营DDD的分层架构设计
如果无法正常显示,请先停止浏览器的去广告插件。
        
                1. 机票辅营DDD的分层架构设计
钟福海/机票辅营            
                        
                2. 自我介绍
2018年12月加入去哪儿,负责机票辅营业务开发和系统重构
热衷于通过技术升级解决业务痛点问题,提升复杂系统可维护性
课程背景
DDD基础和DDD实践(已完结)侧重DDD方法论(工具应用)
业务架构(进行中),侧重业务实践(项目经验)
内容介绍            
                        
                3. 案例1:供应系统DDD实践
CONTENTS 目录
案例2:交易系统DDD实践            
                        
                4. 背景:辅营介绍
01 辅营业务场景
02 辅营业务边界            
                        
                5. app首页
机票首页            
                        
                6. 航班列表
OTA列表
填单页
详情            
                        
                7. 售前
售后            
                        
                8. 辅营业务边界            
                        
                9. 背景:供应系统介绍
第一个用DDD设计的系统
从辅营交易系统拆分出来
定位是负责与供应商交互
主要处理权益的发/查/废业务            
                        
                10. 案例1:供应系统DDD分层设计
01 领域模型(战略设计)
02 CQRS(战术设计)
03 整洁架构(战术设计)
DDD = 领域模型(构建步骤)+ 分层架构(技术方案)            
                        
                11. 回顾:DDD设计流程
来源:https://mp.weixin.qq.com/s/JlIHUTRwpJMyenDb_LhOeg            
                        
                12. 回顾:常规的战略设计流程
来源:https://mp.weixin.qq.com/s/JlIHUTRwpJMyenDb_LhOeg            
                        
                13. 1、领域模型:供应系统战略设计
场景分析
业务专家基于业务场景,划分供应子系统(领域划分)
事件风暴
业务专家根据发/查/废/使用等用例,识别领域对象和行为            
                        
                14. 回顾:常规领域模型
来源:https://mp.weixin.qq.com/s/JlIHUTRwpJMyenDb_LhOeg            
                        
                15. 1、领域模型:供应系统的实现            
                        
                16. 1、领域模型:供应订单域代码落地            
                        
                17. 回顾:DDD的分层架构
来源:https://mp.weixin.qq.com/s/JlIHUTRwpJMyenDb_LhOeg            
                        
                18. 2、CQRS:概念
独立模型
模型共用
来源:https://martinfowler.com/bliki/CQRS.html            
                        
                19. 2、CQRS:优势
来源:https://processon.com/view/5d6c8dbee4b0f425534784f8            
                        
                20. 2、CQRS:供应系统的实现            
                        
                21. 回顾:整洁架构
分层解耦
单向依赖
来源:https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html            
                        
                22. 3、整洁架构:use case代码举例            
                        
                23. 案例1:供应系统总结
背景:新系统,业务明确
工具:DDD建模
落地:整洁架构+CQRS            
                        
                24. 辅营交易系统重构的背景
客观原因:业务复杂
8核心系统10+关联系统
6年36.5万行
频繁变更
直接原因:缺设计和规范 成本压力
直接影响:维护成本高 难复用,难更改
难理解,难测试
发展诉求:支撑更多业务线 火车,酒店,国际
超商,会员,分销            
                        
                25. 思考: DDD做设计 VS 做参考?
DDD做设计(自顶向下,有条不紊)
资源,团队,时间
DDD做参考(抓大放小,各个击破)
重点,变通,演进            
                        
                26. 案例2:辅营交易系统DDD的过渡
01 业务梳理(可维护性)
02 封装变化(可扩展性)
03 模块划分(可维护性)
04 分层测试(可维护性)            
                        
                27. 1、业务梳理:领域建模还可以这么整?
售前
售后            
                        
                28. 1、业务梳理:系统边界=限界上下文?            
                        
                29. 1、业务梳理:重新梳理核心用例?            
                        
                30. 高频需求都这么麻烦?            
                        
                31. 2、封装变化:背景
看哪里
业务很发散
调用链路深
圈复杂度高
劣质&有毒
改哪里
霰弹式开发
测试链路长
踩坑&挖坑            
                        
                32. 2、封装变化:解决方案            
                        
                33. 2、封装变化:效果            
                        
                34. 交易系统封装变化            
                        
                35. 交易系统封装变化            
                        
                36. 2、封装变化:总结
看哪里
业务梳理(文档)
单元测试(校验)
接口抽象(及时 )
改哪里
桥接模式(扩展)
接口抽象(解耦)            
                        
                37. 3、模块划分:背景            
                        
                38. 3、模块划分:领域模型的问题            
                        
                39. 3、模块划分:领域模型的改进            
                        
                40. 3、模块划分:贫血模式的聚合根            
                        
                41. 3、模块划分:系统架构图
业务控制流程图
分层架构逻辑视图            
                        
                42. 3、模块划分:整洁架构代码实现            
                        
                43. 3、模块划分:控制流程图            
                        
                44. 3、模块划分:重构前的业务流程            
                        
                45. 3、模块划分:重构后的业务流程            
                        
                46. 交易模块划分            
                        
                47. 3、模块划分:辅营交易的控制流程图            
                        
                48. 3、模块划分:从adapter看控制流            
                        
                49. 4、分层测试:重构代码的测试            
                        
                50. 案例2:交易系统总结
背景:老系统,业务繁杂
工具:DDD建模+架构演进
落地:整洁架构+Use Case            
                        
                51. 分层测试:分层测试有哪些优势?
降低测试复杂度(跨层/mock)
方便分工协作:(分层解耦)
方便独立维护:(高内聚)
利于规范检查:(高质量,好测试)            
                        
                52. 分层测试:微服务测试关注点
来源:https://martinfowler.com/articles/microservice-testing            
                        
                53. 分层测试:常规的分层测试举例            
                        
                54. 分层测试:辅营交易的测试现状
现状:
测试包没按照整洁架构分层
测试用例按照分层关注点组织
改进:
源码和测试包按分层拆分物理组件
用archunit检查架构和包结构约束            
                        
                55. 课程总结
协议 统一标准,共同视角
分治 化繁为简,各个击破
分层 依赖倒置,分层解耦
演进 抓大放小,先易后难,完成胜于完美            
                        
                56.