采用案例贯穿的教学手法,详细介绍了软件设计过程需要注意的要点及难点
从软件设计原则、设计模式、架构设计到代码重构、性能优化等多维度展开,构建完整的软件设计与重构知识体系
让学员在模拟实战环境中体验完整的软件设计与重构过程,直面并解决实际开发中遇到的复杂问题,真正做到学以致用
讲师将十几年的行业经验与大量的真实案例结合,有针对性的解决项目过程中技术人员常犯的错误,拓展职业视野
在编码之前制定设计方案,避免在开发过程中频繁修改代码,提高软件开发效率
编码之前进行全面的需求分析和规划,从而设计出更加优秀的软件架构和模块设计,提高软件的质量和可靠性
设计出易于维护和升级的软件系统,减少维护成本和升级难度
在开发过程中发现问题和缺陷,避免在后期进行大量的修改和调整,从而减少软件开发成本
优化代码结构、提高可读性和可维护性来提升代码质量
优化算法和数据结构,提高软件的性能和响应速度
使软件更加灵活,以适应新的需求,同时保持代码的清晰和可维护性
将软件更新到最新的技术栈,提高安全性、稳定性和可扩展性
统一代码风格,提高团队合作效率
帮助识别和修复潜在的bug,减少软件的故障率和维护成本
① 软件的质量保证:内部质量与外部质量
② 高质量软件设计的标准:易读、易于维护、易于变更
① 领域驱动设计
② 案例讲解软件设计原则:低耦合、高内聚
③ 探讨软件设计模式:由来、发展及对高质量软件的作用
① 适配器模式
② 策略模式
③ 工厂模式
④ 单例模式
⑤ 原型模式
⑥ 模板方法模式
⑦ 装饰者模式
⑧ 桥接模式
⑨ 享元模式
⑩ 其它设计模式
观察者模式① 质量不断下降的表现及根源
② 案例分析:一个遗留系统的演化过程
① 案例讲解软件设计原则
② 小步快跑模式的开发过程
① 软件重构的概念
② 关于重构的讨论
③ 案例分析:重构一个大型遗留系统
④ 案例:智能温控器分析设计过程(嵌入式+物联网)
点击获取课程资料在真实场景中寻找问题根源,解决设计难题,并制定正确的设计方案
用慢动作的手法还原需要变更,通过每一次的正确设计,不让软件退化,保证高质量
重构是软件变更中保持高质量的必然
学会运用“两顶帽子”的方式应对变更
实战角度讲解“小步快跑”过程
掌握“软件重构七步曲”
自己动手重构一个大系统
学会有效解决软件重构面临的难题
核心思想讲解+软件重构实践+点评分析总结
获得由工业和信息化部教育与考试中心统一颁发《软件设计模式与重构工程师》工业和信息化职业能力证书
对软件开发有兴趣,希望系统地学习软件设计模式和重构技术的人群
已经具备一定软件开发经验,但希望提高代码质量、可维护性和扩展性的开发者
想要进一步深化对软件设计原则和最佳实践的理解,以及通过重构提升现有代码质量的开发者
希望了解如何在整个团队或项目中推广和应用设计模式和重构技术的人群
软件开发的轮回:
1.起初客户提出的需求并不复杂
2.随着日后的变更,系统开始变得越来越复杂
3.激烈的市场要求快速交付
4.越来越复杂的系统交付速度会越来越慢
5.越来越快的技术发展要求技术架构不断更迭
带来的问题:
1.系统交付速度越来越慢而不能适应市场变化
2.技术架构不断更迭越来越困难而不能适应技术发展
3.测试变得越来越困难而任务繁重
4.软件系统越来越笨重而不适应未来变化
探讨软件退化的根源
案例分析:演示电商网站付款功能代码质量下降的过程
1.起初的设计
2.随后的变更
3.质量不断下降的过程
软件质量下降的根源:
1.软件总是因变更而变得越来越复杂
2.软件结构已经不再适应复杂的软件需求
3.必须要调整软件结构以适应新的软件需求
4.重构是保持高质量软件设计的习惯
两顶帽子的设计方式
软件是因需求变更而质量下降吗?
案例分析:推演软件变更的设计过程
应对软件变更的最佳方式:两顶帽子
1.重构原有代码以适应新的需求
2.实现新的需求
案例:演示两顶帽子的设计过程
准确理解高质量代码
1.剖析高质量代码设计的本质
2.软件的质量保证:内部质量与外部质量
3.高质量软件设计的标准:易于阅读、易于维护、易于变更
准确理解代码整洁之道
1.什么时候应该代码整洁
2.函数代码整洁应当遵循的原则
3.类与接口代码整洁应当遵循的原则
4.注释代码的整洁之道
5.异常处理的代码整洁之道
案例:实战项目的整洁代码展示
案例分析软件设计原则及其本质
1.低耦合
1)依赖反转原则(DIP)
案例:购票业务类与数据访问类
2)开放-封闭原则(OCP)
案例:需求变更与可扩展点设计
案例:Square/Circle的解决方案
2.高内聚
1)单一职责原则(SRP)
案例:财务凭证变更带来的问题
案例:超级大函数与大对象的难题
案例:MySQL读写分离的改造过程
2)不要重复自己原则(DRY)
典型的代码重复案例与散弹式修改
探讨代码复用的设计难题与软件重构
案例讲解:代码复用的常用方法
利用DeepSeek进行代码的优化
1.国产智能大模型DeepSeek的13个应用场景:
代码改写、代码解释、代码生成、中英文翻译,等等
2.智能大模型核心应用的精华:
提示词工程、文档上传、搭建本地知识库
3.AI自动化编程带来的挑战:
1)不能交给AI过于复杂的任务
2)AI编写的代码如何规范编程,基于某个平台进行编程
3)AI编写的代码,日后如何变更维护
解决方案:以知识库作为规范指导AI编程
1.通过知识库制定DeepSeek软件开发的模板与规范:
1)文档模板:架构设计的模板、用例模型的模板、领域模型的模板
2)开发规范:领域对象、服务接口、DSL配置、测试用例的开发规范
2.基于知识库进行的DeepSeek软件开发:
1)基于业务需求进行分析设计
2)将大任务拆分成无数个小任务
3)基于知识库的规范进行AI编程
4)基于知识库的规范AI编写测试用例
软件重构的概念与设计思想
1.重构是一系列代码的等量变换
案例:一个Hello World重构过程
2.重构的保险索:自动化测试
案例:Hello World的自动化测试过程
3.软件修改的四种动机——重构的价值
4.一个真实的谎言——重构的误区
5.重构的主要方法与技巧
重构是高质量编码的实现方式
1.重构是代码整洁与高质量编码的实现方式
1)准确理解软件重构
2)每次变更的时候,先重构再实现需求
3)每过一段时间就通过重构整理一次代码
2. 基于AI的软件重构思路
1)用AI进行原始代码的理解
2)用AI进行代码的改写与优化
3)用AI编写测试用例
3.案例:演练Hello World的维护变更过程
1)最初的软件设计
2)第一次变更:抽取方法与抽取类
3)第二次变更:抽取接口与系统分层
4)重构完成以后,用测试用例进行验证
演练一个完整的重构过程
案例分析:重构一个大型遗留系统
1.重构第一步:分解大函数
超级大函数及其危害
案例:演示大函数产生的过程
案例:演示抽取方法操作步骤
实践抽取方法会遇到的问题和解决方案
演练AI编程在抽取方法中的应用
2.重构第二步:拆分大对象
超级大对象及其危害
案例:演示超级大对象的产生过程
案例:演示抽取类的操作步骤
讲解单一职责设计原则
案例:演示“分久必合,合久必分”的重构过程
演练AI编程在抽取类中的应用
3.重构第三步:提高复用率
讲解顺序编程及其危害
“不要重复代码”原则
案例:提高代码复用的6个方法
案例:演示新增代码时的代码复用过程
用静态检查工具检查重复代码
4.重构第四步:可扩展设计
过度设计 vs. 恰如其分的设计
讲解“开放-封闭”的设计原则
案例:讲解可扩展设计的4个方法
案例:讲解新增代码的可扩展设计过程
5.重构第五步:降低耦合度
案例:讲解接口、实现与工厂模式
案例:讲解外部接口解耦与适配器模式
演练用AI编程进行设计模式的设计
6.重构第六步:系统分层
反思软件架构需要怎样的分层结构
遗留系统如何拥抱需求变化
遗留系统如何应对技术变革
7.重构第七步:领域驱动设计
领域驱动设计的概念
讲解领域模型分析方法
演练一个完整的DeepSeek开发过程
1.通过知识库制定DeepSeek软件开发的模板与规范:
1)文档模板:架构设计的模板、用例模型的模板、领域模型的模板
2)开发规范:领域对象、服务接口、DSL配置、测试用例的开发规范
2.基于知识库进行的DeepSeek软件开发:
1)DeepSeek辅助的软件需求探索与编写需求文档
2)DeepSeek辅助编写用例模型
3)DeepSeek辅助编写领域模型
4)DeepSeek辅助形成数据库设计,编写SQL脚本
5)DeepSeek辅助编写领域对象与服务接口代码,进行DSL配置
6)DeepSeek辅助,基于某个平台进行业务代码的编写
7)DeepSeek辅助创建测试用例代码
1. 设计模式的由来
2. 设计模式的发展
3. 设计模式对高质量软件设计的作用
1. 软件设计中外部接口的难题
2. 第三方框架带来的设计难题
3. 适配器模式及其概念
4. 实战演练AI的设计编码
适配器模式的应用
1. 适配器模式解决第三方框架带来的难题
案例:Hibernate适配器的设计
2. 适配器模式解决外部接口的设计难题
案例:第三方支付接口的设计
案例:财务数据接口的设计
1. 工资发放功能遇到的难题
1) 工资发放功能最初的设计及其问题
2) 对问题的分析过程及其新的设计思路
2. 策略模式及其概念
3. 实战演练AI的设计编码
策略模式的应用
1. 案例:工资发放功能设计改进的过程
1) 工资发放功能的Java实现
2) 工资发放功能的C++实现
2. 案例:折扣功能的设计实现
1) 深入理解开放-封闭原则
2) 折扣功能的变更与改进过程
探讨软件设计中遇到的难题
1. 依赖反转原则的设计难题
2. 开放-封闭原则的设计难题
3. 探讨工厂模式的本质
简单工厂模式的设计实现
1. 简单工厂模式的C++实现
2. 基于配置的简单工厂模式
3. 剖析简单工厂如何实现依赖反转原则
案例:剖析Spring的beanFactory
4. 解读工厂模式对设计的重大意义
5. 讲解如何创建一个工厂
1) 创建工厂的步骤与关键点
2) 利用Spring框架简化工厂类的设计
6. 实战演练用AI设计一个工厂
什么是单例模式
1. 设计工厂类面临的问题
2. 单例模式及其概念
3. 如何实现单例模式
单例模式的应用
1. 用单例模式设计工厂
2. 用单例模式提高性能
什么是原型模式
1. 工厂类在提供产品时遇到的设计问题
2. 原型模式及其概念
原型模式的设计实现
案例:函数调用的无副作用问题
案例:JavsScript中的原型模式
什么是模板方法模式
1. 煮咖啡给我们的启示
2. 设计工厂类的新思路
3. 模板方法模式及其概念
模板方法模式的作用与技巧
案例:一个工厂模板的设计与实现
深入理解不要重复自己原则
1. 重复代码带来的严重后果
2. 散弹式修改及其解决思路
3. 探讨实现代码复用的难题
4. 代码复用在不同场合采用的方法
5. 模板方法模式在代码复用中的作用
1. 业务量增长带来的多数据源问题
2. 运用装饰者模式巧妙解决多数据源问题
3. 装饰者模式及其概念
4. 实战演练用AI进行设计变更
装饰者模式的应用
案例:多数据源的设计实现
1. 多数据源问题的分析设计过程
2. 多数据源的设计与实现
案例:商城收银系统的设计变更过程
1. 商城收银系统期初的设计
2. 混合策略的设计与实现
3. 多层装饰者的设计与实现
1. 对象继承的泛滥
2. 桥接模式及其概念
3. 实战演练用AI进行设计变更
桥接模式的应用
案例:员工管理与工资发放的设计
1. 员工管理与工资发放带来的继承泛滥问题
2. 采用桥接模式的设计与实现
案例:查询支持类的设计
1. 查询支持类遭遇的继承泛滥问题
2. 查询支持类的解决方案
3. 单例模式下查询支持类的设计
深入体会单一职责原则
什么是享元模式
1. Hibernate是怎样访问数据的
2. 享元模式及其概念
享元模式的应用
案例:数据缓存的设计实现
案例:享元模式在大数据中的应用
用一个情景剧秒懂其它设计模式
观察者模式:JobHunter的情景剧
代理模式:老板与秘书的差异
命令模式:像工作流一样处理业务
外观模式:超级家庭影院的烦恼
构建器模式:SQL Builder的设计
组合模式:如何构建一棵树
中介者模式:QQ在沟通中的作用
迭代器模式:如何顺序访问一个集合
1. 重构是一种习惯
2. 重构让程序可读
3. 重构,才好复用
4. 先重构,再扩展
5. 紧急任务时的重构
1. 重构初期的困局
2. 解耦与自动化测试
3. 建立自动化测试体系
4. 通过AI建立自动化测试体系
1. 评价软件质量的指标
2. 评价软件质量的工具
软件重构的概念与设计思想
1.重构是一系列代码的等量变换
案例:一个Hello World重构过程
2.重构的保险索:自动化测试
案例:Hello World的自动化测试过程
3.软件修改的四种动机——重构的价值
4.一个真实的谎言——重构的误区
5.重构的主要方法与技巧
重构是高质量编码的实现方式
1.重构是代码整洁与高质量编码的实现方式
1)准确理解软件重构
2)每次变更的时候,先重构再实现需求
3)每过一段时间就通过重构整理一次代码
2. 基于AI的软件重构思路
1)用AI进行原始代码的理解
2)用AI进行代码的改写与优化
3)用AI编写测试用例
3.案例:演练Hello World的维护变更过程
1)最初的软件设计
2)第一次变更:抽取方法与抽取类
3)第二次变更:抽取接口与系统分层
4)重构完成以后,用测试用例进行验证
演练一个完整的重构过程
案例分析:重构一个大型遗留系统
1.重构第一步:分解大函数
超级大函数及其危害
案例:演示大函数产生的过程
案例:演示抽取方法操作步骤
实践抽取方法会遇到的问题和解决方案
演练AI编程在抽取方法中的应用
2.重构第二步:拆分大对象
超级大对象及其危害
案例:演示超级大对象的产生过程
案例:演示抽取类的操作步骤
讲解单一职责设计原则
案例:演示“分久必合,合久必分”的重构过程
演练AI编程在抽取类中的应用
3.重构第三步:提高复用率
讲解顺序编程及其危害
“不要重复代码”原则
案例:提高代码复用的6个方法
案例:演示新增代码时的代码复用过程
用静态检查工具检查重复代码
4.重构第四步:可扩展设计
过度设计 vs. 恰如其分的设计
讲解“开放-封闭”的设计原则
案例:讲解可扩展设计的4个方法
案例:讲解新增代码的可扩展设计过程
5.重构第五步:降低耦合度
案例:讲解接口、实现与工厂模式
案例:讲解外部接口解耦与适配器模式
演练用AI编程进行设计模式的设计
6.重构第六步:系统分层
反思软件架构需要怎样的分层结构
遗留系统如何拥抱需求变化
遗留系统如何应对技术变革
7.重构第七步:领域驱动设计
领域驱动设计的概念
讲解领域模型分析方法
演练一个完整的DeepSeek开发过程
1.通过知识库制定DeepSeek软件开发的模板与规范:
1)文档模板:架构设计的模板、用例模型的模板、领域模型的模板
2)开发规范:领域对象、服务接口、DSL配置、测试用例的开发规范
2.基于知识库进行的DeepSeek软件开发:
1)DeepSeek辅助的软件需求探索与编写需求文档
2)DeepSeek辅助编写用例模型
3)DeepSeek辅助编写领域模型
4)DeepSeek辅助形成数据库设计,编写SQL脚本
5)DeepSeek辅助编写领域对象与服务接口代码,进行DSL配置
6)DeepSeek辅助,基于某个平台进行业务代码的编写
7)DeepSeek辅助创建测试用例代码
1. 设计模式的由来
2. 设计模式的发展
3. 设计模式对高质量软件设计的作用
1. 软件设计中外部接口的难题
2. 第三方框架带来的设计难题
3. 适配器模式及其概念
4. 实战演练AI的设计编码
适配器模式的应用
1. 适配器模式解决第三方框架带来的难题
案例:Hibernate适配器的设计
2. 适配器模式解决外部接口的设计难题
案例:第三方支付接口的设计
案例:财务数据接口的设计
1. 工资发放功能遇到的难题
1) 工资发放功能最初的设计及其问题
2) 对问题的分析过程及其新的设计思路
2. 策略模式及其概念
3. 实战演练AI的设计编码
策略模式的应用
1. 案例:工资发放功能设计改进的过程
1) 工资发放功能的Java实现
2) 工资发放功能的C++实现
2. 案例:折扣功能的设计实现
1) 深入理解开放-封闭原则
2) 折扣功能的变更与改进过程
探讨软件设计中遇到的难题
1. 依赖反转原则的设计难题
2. 开放-封闭原则的设计难题
3. 探讨工厂模式的本质
简单工厂模式的设计实现
1. 简单工厂模式的C++实现
2. 基于配置的简单工厂模式
3. 剖析简单工厂如何实现依赖反转原则
案例:剖析Spring的beanFactory
4. 解读工厂模式对设计的重大意义
5. 讲解如何创建一个工厂
1) 创建工厂的步骤与关键点
2) 利用Spring框架简化工厂类的设计
6. 实战演练用AI设计一个工厂
什么是单例模式
1. 设计工厂类面临的问题
2. 单例模式及其概念
3. 如何实现单例模式
单例模式的应用
1. 用单例模式设计工厂
2. 用单例模式提高性能
什么是原型模式
1. 工厂类在提供产品时遇到的设计问题
2. 原型模式及其概念
原型模式的设计实现
案例:函数调用的无副作用问题
案例:JavsScript中的原型模式
什么是模板方法模式
1. 煮咖啡给我们的启示
2. 设计工厂类的新思路
3. 模板方法模式及其概念
模板方法模式的作用与技巧
案例:一个工厂模板的设计与实现
深入理解不要重复自己原则
1. 重复代码带来的严重后果
2. 散弹式修改及其解决思路
3. 探讨实现代码复用的难题
4. 代码复用在不同场合采用的方法
5. 模板方法模式在代码复用中的作用
1. 业务量增长带来的多数据源问题
2. 运用装饰者模式巧妙解决多数据源问题
3. 装饰者模式及其概念
4. 实战演练用AI进行设计变更
装饰者模式的应用
案例:多数据源的设计实现
1. 多数据源问题的分析设计过程
2. 多数据源的设计与实现
案例:商城收银系统的设计变更过程
1. 商城收银系统期初的设计
2. 混合策略的设计与实现
3. 多层装饰者的设计与实现
1. 对象继承的泛滥
2. 桥接模式及其概念
3. 实战演练用AI进行设计变更
桥接模式的应用
案例:员工管理与工资发放的设计
1. 员工管理与工资发放带来的继承泛滥问题
2. 采用桥接模式的设计与实现
案例:查询支持类的设计
1. 查询支持类遭遇的继承泛滥问题
2. 查询支持类的解决方案
3. 单例模式下查询支持类的设计
深入体会单一职责原则
什么是享元模式
1. Hibernate是怎样访问数据的
2. 享元模式及其概念
享元模式的应用
案例:数据缓存的设计实现
案例:享元模式在大数据中的应用
用一个情景剧秒懂其它设计模式
观察者模式:JobHunter的情景剧
代理模式:老板与秘书的差异
命令模式:像工作流一样处理业务
外观模式:超级家庭影院的烦恼
构建器模式:SQL Builder的设计
组合模式:如何构建一棵树
中介者模式:QQ在沟通中的作用
迭代器模式:如何顺序访问一个集合
1. 重构是一种习惯
2. 重构让程序可读
3. 重构,才好复用
4. 先重构,再扩展
5. 紧急任务时的重构
1. 重构初期的困局
2. 解耦与自动化测试
3. 建立自动化测试体系
4. 通过AI建立自动化测试体系
1. 评价软件质量的指标
2. 评价软件质量的工具