一、 软件复杂度 - 软件行业的主要任务就是对应复杂度 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/Post Condition 4. 案例 - “高端客户优惠”这个需求如何做? 5. 通用语言的价值 6. 通用语言的代码表达 7. 运用领域场景分析提炼领域知识 8. 建立统一语言 | ||
三、 界限上下文 – 有问题必有解决方案 1. 界限上下文的目的:消除歧义 2. 界限上下文与通用语言 3. 案例:电商系统下单流程中的界限上下文分析 4. 不要将有二义性的领域概念放在同一界限上下文中 5. 理解界限上下文 6. 识别界限上下文 7. 理解上下文映射 8. 上下文映射的团队协作模式 9. 上下文映射的通信集成模式 10. 辩别限界上下文的协作关系 | ||
四、 架构 – 总有一款适合你 1. 认识分层架构 2. 分层架构的演化 3. 领域驱动架构的演进 4. 界限上下文与架构 5. 六边形架构 6. 端口与适配器 7. 整洁架构 8. CQRS架构 9. 在CQRS中处理具有最终一致性的查询模型 10. 事件溯源 Event Souring 11. 使用乐观锁处理并发更新 12. 事件溯源和发布事件 13. 幂等方式处理消息 14. 使用快照提升性能 15. 管道与过滤器 16. SAGA (消息驱动事务) 17. 协同式与编排式 18. SAGA下实现隔离 | ||
五、 实体 – 数据容器还是行为载体 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信息) |