您当前的位置:首页>课程>领域驱动设计与系统架构实战

领域驱动设计与系统架构实战

浏览:80
分享

Owen Dai Read more

百林哲咨询(北京)有限公司专家团队成员

现任职于某智能科技公司研发部总监、资深架构师,15年以上大型软件产品架构经验,负责带领团队研发计算机视觉、AI安防及大数据相关产品。擅长企业级系统架构,领域驱动设计,重构与模式。

课程简介

DDD作为一套完整而系统的设计方法,设计过程更加规范将领域模型界限上下文边界快速拆分微服务,实现系统架构适应业务的快速变化,此外,DDD显著降低服务的耦合性,建立核心而稳定的领域模型,利于领域知识的传递与传承。本内容侧重于方法论,基于多年实践领域驱动设计的经验与心得,糅合了 DDD 社区最新发展的理论知识与最佳实践,分享Unix 设计哲学、通用语言关键点扩展 - Pre/Post Condition,通过OLIDSRPOCPLSPISPDIP 等原则,覆盖从需求到实现全面系统的讲解领域驱动设计。

 

 

课程收益

全面悉知领域驱动设计整体架构

从需求到实现模型的全流程

掌握微服务形式下的CQRS

根据OLIDSRPOCPLSPISPDIP 等原则完成对应复杂度

熟练运用团队协作模式以及通信集成模式

 

受众人群

具有以下经验的 架构师,后端开发工程师,以及其他软件从业人员

① 具有基础的架构设计知识

② 至少掌握一门面向对象语言

③ 具有基本的面向对象程序设计能力

  ④具有一年或一年以上的业务系统开发经验

课程周期

212H

课程大纲


标题

授课内容

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

 

① 领域驱动设计概览

② 战略与战术

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

④ 软件复杂度的三个成因

⑤ 分离关注点 – Unix 设计哲学

⑥ 隔离业务复杂度与技术复杂度

⑦ 复杂度的横切与纵切

⑧ SOLID原则

⑨ SRP – 单一职责原则

⑩ OCP – 开放封闭原则

⑪ LSP – 里氏替换原则

⑫ ISP – 接口隔离原则

⑬ DIP – 依赖倒置原则

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

二、通用语言 - 工欲善其事必先利其器

 

① 领域专家与开发者的沟通失调

② 通用语言关键点 - 5W2H1E

③ 通用语言关键点扩展 - Pre/Post Condition

④ 案例 - “高端客户优惠”这个需求如何做?

⑤ 通用语言的价值

⑥ 通用语言的代码表达

⑦ 运用领域场景分析提炼领域知识

⑧ 建立统一语言

三、界限上下文 – 有问题必有解决方案

 

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

② 界限上下文与通用语言

③ 案例:电商系统下单流程中的界限上下文分析

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

⑤ 理解界限上下文

⑥ 识别界限上下文

⑦ 理解上下文映射

⑧ 上下文映射的团队协作模式

⑨ 上下文映射的通信集成模式

⑩ 辩别限界上下文的协作关系

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

 

① 认识分层架构

② 分层架构的演化

③ 领域驱动架构的演进

④ 界限上下文与架构

⑤ 六边形架构

⑥ 端口与适配器

⑦ 整洁架构

⑧ CQRS架构

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

⑩ 事件溯源 Event Souring

⑪ 使用乐观锁处理并发更新

⑫ 事件溯源和发布事件

⑬ 幂等方式处理消息

⑭ 使用快照提升性能

⑮ 管道与过滤器

⑯ SAGA (消息驱动事务)

⑰ 协同式与编排式

⑱ SAGA下实现隔离

五、实体 – 数据容器还是行为载体

 

① 贫血模型

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

③ 唯一标识

④ 委派标识

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

⑥ 实战 - 任务分配执行系统 实体行为归属甄别

六、值对象 – 性能提升小帮手

 

① 什么是值对象

② 值对象的特征

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

④ 案例:地址建模与值对象

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

七、聚合 – 比类更高一层的封装

 

① 聚合设计原则

② 聚合设计的过程

③ 聚合的一致性边界

④ 一个事务中只处理一个聚合

⑤ UML 中的聚合 与 DDD 中的聚合

⑥ 聚合内实现事务一致性

⑦ 聚合外实现最终一致性

⑧ 案例:更新订单状态与库存扣减 Version 1.0

⑨ 案例:更新订单状态与库存扣减 Version 2.0

⑩ 聚合设计的注意点

八、微服务的入口 - 应用服务

 

① 用例 (Use Case) 与应用服务

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

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

④ 工作单元 (Unit of Work)

⑤ 数据传输对象 (Data Transfer Object)

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

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

⑧ 案例:实现应用服务

⑨ 应用服务的关注点

⑩ 实战 - 任务分配执行系统 应用层构建

九、领域服务 – 不是实体本身的行为都归它

 

① 领域服务的幂等性

② 案例:实现领域服务

③ 实战 - 任务分配执行系统 领域服务层构建

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

 

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

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

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

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

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

⑥ 案例:实现抽象事件处理

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

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

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

 

① 集合特性

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

③ 资源库的误解

④ 资源库的实现要点

⑤ 案例:资源库的实现

⑥ 领域模型 VS 数据模型

⑦ 案例:泛型资源库

⑧ 实战:实战 - 任务分配执行系统 持久化

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

 

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

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

③ 使用事件表发布事件

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

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

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

十三、微服务形式下的CQRS

 

① DDD中的典型写操作

② 基于数据模型的读操作

③ 基于领域模型的读操作

④ 读写分离模型

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

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

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

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

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



我要参加

可同时提交您的需求,我们会及时与您联系

预约内训

将课程带入到您的团队,为您的团队进行一对一辅导。

相关课程