4006-998-758
3000+课程任你选择
领域驱动与微服务重构
研发学院 领域驱动与微服务重构 开课时间:2024-02-06
戴昊

现任创业AI公司研发技术总监负责带领团队研发计算机视觉、AI安防及大数据相关产品。15年+ 大型软件产品架构经验。曾为日本第一,世界第二的瑞穗银行(Mizuho Bank);世界第二大证券交易所 – 东京证券,五十铃汽车开发企业级系统。曾给深圳证券交易所,深圳证券,招商银行信用卡中心,平安金融,中国电信,DELL 讲授过企业级架构及重构与模式的课程。擅长企业级系统架构,领域驱动设计,重构与模式。


查看老师详情
课程内容

课程大纲

Day1


一、软件复杂度 -软件行业的主要任务就是对应复杂度

1. 领域驱动设计概览

2. 战略与战术

3. 战略层面的三件事 与 战术层面的核心结构

4. 软件复杂度的三个成因

5. 分离关注点 – Unix设计哲学

6. 隔离业务复杂度与技术复杂度

7. 复杂度的横切与纵切

8. 领域驱动设计对软件复杂度的对应


二、宏观设计流程 -- 分析业务领域

1. 什么是业务领域 / 子域

2. 为什么需要考虑领域/ 子域

3. 子域的类型:通用 /核心 /支撑

4. 子域的比较

5. 如何识别子域的边界

6. 业务领域分析案例


三、宏观设计流程 -- 限界上下文

1. 领域专家心智模型上的分歧

2. 通用语言所遇到的问题

3. 建模的本质 与 限界上下文

4. 限界上下文的目的:消除歧义

5. 限界上下文与通用语言

6. 案例:支付宝关联银行账户的建模分析

7. 不要将有二义性的领域概念放在同一限界上下文中

8. 理解限界上下文

9. 案例:限界上下文案例分析 – 信用卡申请


四、架构 – 总有一款适合你

1. 认识分层架构

2. 分层架构的演化

3. DIP依赖倒置原则

4. 领域驱动架构的演进

5. 界限上下文与架构

6. 六边形架构

7. 端口与适配器

8. 整洁架构

9. CQRS架构

10.         在CQRS中处理具有最终一致性的查询模型


五、业务逻辑实现模式

1. 事务脚本模式

2. 事务脚本实现的误区

3. 事务脚本的幂等实现

4. 活动记录模式


六、微观设计–系统的对象化:SOLID建模原则

1. 单一职责原则 SRP

2. 案例:不符合 SRP的设计 / 符合 SRP的设计

3. 演习:在银行业务中,一个不符合SRP的账户管理系统的重构

4. 缺陷并提出重构方案。

5. 开放封闭原则 OCP

6. 案例:如何应对促销需求的变化

7. 里氏替换原则 LSP

8. 演习:银行账户管理系统,储蓄账户 (SavingsAccount) 和支票账户 (CheckingAccount) 的一种不符合 LSP的设计与重构

9. 案例:新产品的实现需求 -- 是继承还是组合

10.         接口隔离原则 ISP

11.         案例:如何做到两全其美

12.         演习:一个通用的BankAccount 接口的设计重构


七、模块化实战案例:

实战:遗留代码重构 -银行贷款计算模块

 

Day2


一、模块化微观设计-- 值对象

1. 什么是值对象

2. 值对象的特征

3. 为什么值对象这么容易被忽略

4. 案例:Money对象建模与值对象

5. 案例:实现值对象层超类型


二、模块化微观设计-- 实体

1. 贫血模型

2. 如何避免贫血,实体与领域服务之间的分寸

3. 唯一标识

4. 委派标识

5. 案例:实现实体层超类型(Layer Supertype)

6. 实战 –订单系统建模   实体行为归属甄别


三、模块化微观设计– 比类更高一层的封装

1. 聚合设计原则

2. 聚合设计的过程

3. 聚合的一致性边界

4. 一个事务中只处理一个聚合

5. UML 中的聚合 与 DDD 中的聚合

6. 聚合内实现事务一致性

7. 聚合外实现最终一致性

8. 案例:银行账户与交易之间的建模关系

9. 聚合设计的注意点


四、模块化微观设计- 应用服务

1. 用例   (Use Case) 与应用服务

2. 微服务的网关 与 应用服务 之间的关系

3. 应用服务中的 编排,转换,验证,转发

4. 工作单元 (Unit of Work)

5. 数据传输对象 (Data Transfer Object)

6. 事务脚本 (Transaction Script) 与领域模型

7. 依赖注入在应用服务中的使用

8. 案例:实现应用服务

9. 应用服务的关注点


五、模块化微观设计- 领域服务

1. 领域服务的幂等性

2. 案例:实现领域服务


六、领域事件 – 保持最终一致性的信使

1. 领域事件是领域建模中极其重要的部分

2. 事务一致性,高并发下的窘境

3. 最终一致性,妥协带来高扩展性

4. 原则:一个事务中只对一个聚合进行修改

5. 案例:实现抽象事件源,发布事件源

6. 案例:实现抽象事件处理

7. 案例:实现领域事件的发布与订阅

8. 实战   -任务分配执行系统 任务分配领域逻辑


七、资源库 – 聚合的起点与终点

1. 集合特性

2. 资源库与数据访问层的区别

3. 资源库的误解

4. 资源库的实现要点

5. 案例:资源库的实现

6. 领域模型 VS数据模型

7. 案例:泛型资源库


八、微服务中基于事件的系统架构

1. 微服务之间如何稳健的发布与消费事件

2. 如何保证发布事件的原子性

3. 使用事件表发布事件

4. 案例:如何实现事件感知聚合根

5. 案例:如何实现事件感知资源库

6. 如何通过 AOP 进行通用的事件处理


九、微服务形式下的CQRS

1. DDD中的典型写操作

2. 基于数据模型的读操作

3. 基于领域模型的读操作

4. 读写分离模型

5. 案例:电商系统中的读写分离场景

6. 单进程单实体 + 共享存储/共享模型:Inventory详情查询

7. 单进程单实体 + 共享存储/分离模型:Product摘要查询

8. 单进程跨实体 + 分离存储/分离模型:Product详情查询(包含Category信息)

9. 跨进程跨实体 + 分离存储/分离模型:Order详情查询(包含Product信息)


返回上一级