领域驱动软件设计公开课
培训对象:
中高级工程师、企业架构师、软件设计师、技术决策/解决方案人员等。
培训收益
现在是一个快速变化的时代,我们不得不面对激烈的竞争和快速的市场变化。快速的变化,带来软件需求的快速变革。因此,所有的软件企业不得不面对这样一个事实:当软件系统经历了无数次变更以后,程序变得凌乱不堪、难于维护。而软件经过了无数次变更以后,系统的业务逻辑变得越来越复杂,我们的设计开始迷失方向。这种设计的迷失,加快了软件退化的速度,使得任何一个变更,都变得成本巨大。这就是现代软件企业不得不面对的困境。
如何解决这种软件的困境呢?领域驱动设计,给我们指明了方向。他通过将软件设计还原到真实世界,将软件设计与真实世界对应起来。这样,当业务逻辑变得越来越复杂的时候,软件需求也开始频繁变更的时候,我们只需要将业务还原到真实场景,依据真实世界来指导我们的软件设计,设计思路就会清晰起来,我们就不再迷失方向。
本课程就是在讲解如何通过领域驱动设计,来应对复杂系统的需求变更,实现高质量的软件设计,避免代码腐化。课程首先剖析了软件退化的根源,通过对真实系统一步一步退化的过程演变,揭示软件退化的根源,为解决问题指明了方向。接着,有针对性地讲解领域驱动设计是如何解决这些问题,为学员能够有效提高软件设计质量,提供了思路与方向
然后,通过真实案例来一步一步讲解如何进行领域驱动设计,如何通过领域驱动设计来指导软件变更,实现高质量的软件设计。本课程注重实战,因此每一部分的讲解都是基于真实场景讲解,并且在真实场景中思考与练习。
培训特色
1.理论与实践相结合、案例分析与行业应用穿插进行;
2.专家精彩内容解析、学员专题讨论、分组研究;
3.通过全面知识理解、专题技能和实践结合的授课方式。
课程收益
本课程注重实战,并以工作坊的形式提供很多案例,让学员通过练习掌握领域驱动设计的过程。同时,通过大量真实的案例,讲解许多公司在开展领域驱动设计的过程中面临的难题、解决的思路,以及最终的设计养
课程大纲:
第一天上午
第一单元
剖析领域驱动的设计思想
为什么我们需要领域驱动设计
1.现如今DDD越来越流行
2.DDD并不能帮助新项目的软件开发
3.DDD真正的作用是日后长期的维护
实践DDD的4大难题:
1.准确理解为什么要采用DDD?
2.怎样正确地进行业务领域建模?
3.怎样用领域模型指导开发与变更?
4.如何设计支持领域驱动的架构设计?
DDD真正的作用是应对日后的软件维护
1.我们现在面对的是快速变化的时代
2.变更越频繁,代码质量下降越快
案例:演示电商网站付款功能代码质量下降的过程
案例分析:揭示软件退化的根源
DDD的解决之道:业务领域建模
3.系统规模越来越大,系统越来越复杂
案例:演示嵌入式温控系统越来越难于维护的根源
案例分析:领域分析才是解决之道
DDD的解决之道:基于限界上下文拆分系统
案例分析:演示电商网站付款功能代码质量下降的过程
1.起初的设计
2.随后的变更
3.质量不断下降的过程
软件质量下降的根源:
1.软件总是因变更而变得越来越复杂
2.软件结构已经不再适应复杂的软件需求
3.必须要调整软件结构以适应新的软件需求
DDD的建模过程:
1.每次需求变更时先对需求进行领域分析
2.基于领域分析先进行领域模型的变更
3.基于领域模型的变更去指导程序的变更
DDD是应对软件复杂性之道
1.剖析领域驱动的设计思想
2.服务、实体与值对象的概念
3.充血模型与贫血模型的设计思路
4.问题域、子域与限界上下文划分
基于领域模型的设计变更
1.演练基于DDD的设计与变更过程
2.演练领域模型如何指导数据库设计
3.演练领域模型如何指导程序设计
4.聚合、仓库与工厂:傻傻分不清
5.限界上下文:系统拆分的利器
案例:重新演练电商网站付款功能的变更过程
第一个版本的领域模型与设计
第一次变更的分析设计过程
第二场变更的设计实现
第三次变更的设计实现
第四次变更与架构演化
第一天下午
第二单元
演练领域驱动的设计过程
领域建模分析过程
演练案例:在线订餐系统的领域设计过程
1.从领域中吸取知识
2.统一语言建模
3.事件风暴会议
1)梳理业务流程,识别领域事件
2)为每个领域事件识别参与者、行为、相关事物
3)标记事物之间的关系、聚合、聚合根
4)根据业务划分限界上下文
5)遍历所有事件,确定上下文映射
4.业务领域建模
1)为每个领域事件构建业务领域模型
2)划分主题域、支撑域、通用域
3)落实各子域之间的联系、接口及事件通知机制
基于领域模型的微服务设计
1.小而专的微服务设计
2.限界上下文与微服务拆分
3.上下文地图与微服务接口
4.各微服务中实体、值对象与服务的设计
5.各微服务中聚合、工厂与仓库的设计
6.领域模型4种关系3种继承的数据库设计
7.聚合层的设计、工厂和仓库的实现
8.基于DDD的微服务架构分层
解决DDD的设计难题
1.跨库查询的设计难题与设计实现
2.领域事件的通知机制与设计实现
3.微服务接口的防腐层设计
4.状态查询跟踪的设计思路与代码实现
分组练习:按照事件风暴的步骤进行业务领域建模
1. 召开事件风暴会议
2. 进行业务领域建模
3. 基于领域模型设计开发系统
第二天上午
第三单元
领域驱动设计实践
实战演练:远程智慧医疗大数据平台设计过程
1.系统业务规划与战略设计
2.子系统→限界上下文→功能模块划分
3.由粗到细的用例建模
4.各子域业务领域建模
1)智慧诊疗数据模型的领域分析
2)诊所管理信息系统的领域分析
5.各子域的接口设计
1)上下文地图的模型分析
2)微服务接口的方案设计
6.微服务的技术落地实践
1)去中心化的技术治理
2)微服务的技术中台
3)微服务的云端应用平台
起初:一个传统的诊所管理系统向互联网转型
1)起初没有采用领域驱动设计,也运行了这么多年
2)现在向互联网转型,业务变得越来越复杂,怎么开始领域建模?
第一步:站在全局的系统建设规划
第二步:DDD战略设计与限界上下文划分
第三步:各子域的业务领域建模
第四步:上下文地图与各子域的接口设计
转型成互联网连锁诊所系统,又该如何分析设计
1)基于领域模型进行新需求的分析
2)基于领域模型进行原有代码的更新维护
3)基于限界上下文进行微服务的拆分,以及这个过程中的坑
第一步:基于DDD进行战略设计的调整
第二步:各子域的业务领域建模调整
第四步:上下文地图与各子域的接口设计
第五步:基于DDD的微服务拆分
基于DDD的数据库设计与去中心化的数据治理
如何由原有的贫血模型向现在的充血模型改造
如何解决跨库的关联查询与事务处理
如何实现领域事件的消息推送机制
如何实现跨库的状态数据查询
如何打造基于整洁架构的领域驱动设计框架
增加人工智能的智能诊疗数据模型
1)如何通过领域模型来开展数据智能业务
2)如何基于领域模型的规划与智能系统的接口
3)基于领域模型的微服务+大数据的设计实践
分组练习:按照领域模型进行设计开发
1. 基于领域模型进行微服务的拆分与设计
2. 基于领域模型进行每个微服务的数据库设计
3. 基于上下文地图形成微服务间的契约与接口
第二天下午
第四单元
基于领域驱动的技术中台建设 DDD需要强大技术架构支持
1.降低技术门槛,减少开发工作量 → 制订规范、合理分层、降低复杂度
2.易于业务变更,易于架构演化 → 将业务与技术解耦
3.支持领域驱动,支持微服务 → 通用仓库、工厂及基础设施的设计
4.平台不断完善,功能不断积累 → 敏捷架构设计:架构跑道与使能故事
支持DDD的技术架构建设思路
1.分析当前软件架构设计与架构演化的痛点与根源
2.阐述技术中台的建设思路
1)将业务与技术解耦 → 整洁架构与六边形架构
2)提取共性,精简业务代码 → 单Controller,单Dao
支持领域驱动+微服务的技术中台
案例:在线订餐系统的应用
1.通用、可配置的DDD仓库与工厂的设计
2.解决跨库的关联查询与事务处理
3.纯洁的Service与Entity便于不断地架构演化
现有系统的整洁架构转型
1.系统级的重构方法与步骤
2.建立接口层解耦业务代码与技术框架的过程
3.基于整洁架构的技术架构演化与快速交付
第三天
第五单元
基于DDD的微服务设计实践
实战演练:高并发高可用的订单系统
微服务架构的6种设计模式
1.聚合模式
案例:电商网站购物功能的设计
微服务前后端分离的设计
分布式事务的两阶段提交
TCC方案与阿里Seata
演练:运用Seata实现微服务的分布式事务
基于消息的最终一致性设计
演练:基于消息实现微服务的分布式事务
案例:电商网站下单服务的设计
单一职责原则与领域驱动设计
互联网纵向切分在微服务的实现
纵向切分应当注意的设计问题
解决跨库关联查询的设计
演练:微服务间解决跨库关联查询的设计
2.代理模式
案例:电商网站多渠道支付的微服务实现
3.链式模式
4.分支模式
5.数据共享模式
案例:大数据与微服务结合的架构设计
案例:电商网站海量订单数据的秒级查询
6.异步消息模式
案例:电商网站异步化操作的微服务实现
微服务的拆分原则
1.能不拆尽量不拆:减少微服务间的调用
2.该拆分就得拆分
1)公共模块该拆分就得拆分
2)越来越复杂的模块该拆分就得拆分
领域驱动软件设计公开课
|
||
联系电话:4000504030 |
线上课程关注公众号 |