课程简介
本课程基于多年实践领域驱动设计的经验与心得,糅合了 DDD 社区最新发展的理论知识与最佳实践,覆盖从需求到实现全面系统的讲解领域驱动设计。并将DDD理论实践到分布式系统架构特别是微服务架构之上、并给开发人员提供最佳实践。
课程特点
● 系统全面详尽讲解领域驱动设计
● 知识点结合项目实践案例来分析
● 结合分布式系统架构展开
● 展现了从需求到实现模型的全流程
● 糅合了 DDD 社区的最新发展形态
课程对象
具有以下经验的 架构师,后端开发工程师,以及其他软件从业人员
● 具有基础的架构设计知识
● 至少掌握一门面向对象语言
● 具有基本的面向对象程序设计能力
● 具有一年或一年以上的业务系统开发经验
课程时长
2天(6小时/天)
课程大纲
Day1 | |
一、 软件复杂度 -软件行业的主要任务就是对应复杂度 1. 领域驱动设计概览 2. 战略与战术 3. 战略层面的三件事 与 战术层面的核心结构 4. 软件复杂度的三个成因 5. 分离关注点 – Unix设计哲学 6. 隔离业务复杂度与技术复杂度 7. 复杂度的横切与纵切 8. SOLID原则 9. SRP – 单一职责原则 10. OCP – 开放封闭原则 11. LSP – 里氏替换原则 12. ISP – 接口隔离原则 13. DIP – 依赖倒置原则 14. 领域驱动设计对软件复杂度的对应 | |
二、 通用语言 -工欲善其事必先利其器 1. 领域专家与开发者的沟通失调 2. 通用语言关键点 -5W2H1E 3. 通用语言关键点扩展 -Pre/PostCondition 4. 案例 - “高端客户优惠”这个需求如何做? 5. 通用语言的价值 6. 通用语言的代码表达 7. 运用领域场景分析提炼领域知识 8. 建立统一语言 | |
三、 界限上下文 – 有问题必有解决方案 1. 界限上下文的目的:消除歧义 2. 界限上下文与通用语言 3. 案例:电商系统下单流程中的界限上下文分析 4. 不要将有二义性的领域概念放在同一界限上下文中 5. 理解界限上下文 6. 识别界限上下文 7. 理解上下文映射 8. 上下文映射的团队协作模式 9. 上下文映射的通信集成模式 10. 辩别限界上下文的协作关系 | |
四、 架构 – 总有一款适合你 1. 认识分层架构 2. 分层架构的演化 3. 领域驱动架构的演进 4. 界限上下文与架构 5. 六边形架构 6. 端口与适配器 7. 整洁架构 8. CQRS架构 | |
五、 分布式系统架构与微服务 1. 演进中的架构 2. 访问远程服务:远程服务调用 3. 访问远程服务:REST设计风格 4. 事务处理:本地事务 /全局事务 /分布式事务 5. 透明多级分流系统:客户端缓存 6. 透明多级分流系统:域名解析 /负载均衡 7. 透明多级分流系统:内容分发网络 8. 透明多级分流系统:服务器端缓存 9. 架构安全性:认证 /授权 /凭证 / 加密 / 传输 10. 服务与发现 11. 网关路由 12. 流量治理:服务容错 13. 流量治理:流量控制 14. 可观测性:事件日志 15. 可观测性:链路追踪 16. 可观测性:聚合度量 | |
Day2 | |
六、 实体 – 数据容器还是行为载体 1. 贫血模型 2. 如何避免贫血,实体与领域服务之间的分寸 3. 唯一标识 4. 委派标识 5. 案例:实现实体层超类型(Layer Supertype) 6. 实战 -任务分配执行系统 实体行为归属甄别 | |
七、 值对象– 性能提升小帮手 1. 什么是值对象 2. 值对象的特征 3. 为什么值对象这么容易被忽略 4. 案例:地址建模与值对象 5. 案例:实现值对象层超类型 | |
八、 聚合 – 比类更高一层的封装 1. 聚合设计原则 2. 聚合设计的过程 3. 聚合的一致性边界 4. 一个事务中只处理一个聚合 5. UML 中的聚合 与 DDD 中的聚合 6. 聚合内实现事务一致性 7. 聚合外实现最终一致性 8. 案例:更新订单状态与库存扣减 Version 1.0 9. 案例:更新订单状态与库存扣减 Version 2.0 10. 聚合设计的注意点 | |
九、 微服务的入口 - 应用服务 1. 用例 (Use Case) 与应用服务 2. 微服务的网关 与 应用服务 之间的关系 3. 应用服务中的 编排,转换,验证,转发 4. 工作单元 (Unit of Work) 5. 数据传输对象 (Data Transfer Object) 6. 事务脚本 (Transaction Script) 与领域模型 7. 依赖注入在应用服务中的使用 8. 案例:实现应用服务 9. 应用服务的关注点 10. 实战 -任务分配执行系统 应用层构建 | |
十、 领域服务 – 不是实体本身的行为都归它 1. 领域服务的幂等性 2. 案例:实现领域服务 3. 实战 -任务分配执行系统 领域服务层构建 | |
十一、 领域事件 – 保持最终一致性的信使 1. 领域事件是领域建模中极其重要的部分 2. 事务一致性,高并发下的窘境 3. 最终一致性,妥协带来高扩展性 4. 原则:一个事务中只对一个聚合进行修改 5. 案例:实现抽象事件源,发布事件源 6. 案例:实现抽象事件处理 7. 案例:实现领域事件的发布与订阅 8. 实战 -任务分配执行系统 任务分配领域逻辑 | |
十二、 资源库 – 聚合的起点与终点 1. 集合特性 2. 资源库与数据访问层的区别 3. 资源库的误解 4. 资源库的实现要点 5. 案例:资源库的实现 6. 领域模型 VS数据模型 7. 案例:泛型资源库 8. 实战:实战 -任务分配执行系统 持久化 | |
十三、 微服务中基于事件的系统架构 1. 微服务之间如何稳健的发布与消费事件 2. 如何保证发布事件的原子性 3. 使用事件表发布事件 4. 案例:如何实现事件感知聚合根 5. 案例:如何实现事件感知资源库 6. 如何通过 AOP 进行通用的事件处理 | |
十四、 微服务形式下的CQRS 1. DDD中的典型写操作 2. 基于数据模型的读操作 3. 基于领域模型的读操作 4. 读写分离模型 5. 案例:电商系统中的读写分离场景 6. 单进程单实体 + 共享存储/共享模型:Inventory详情查询 7. 单进程单实体 + 共享存储/分离模型:Product摘要查询 8. 单进程跨实体 + 分离存储/分离模型:Product详情查询(包含Category信息) 9. 跨进程跨实体 + 分离存储/分离模型:Order详情查询(包含Product信息) |