您好,欢迎来到诺达名师!
客服热线:18898361497

当前位置: 首页 > 公开课 > 研发项目 > 软件设计模式与软件重构实战训练营

软件设计模式与软件重构实战训练营

培训对象: 初中高级工程师、企业架构师、软件设计师等; 各类软件研发中心的软件设计师、架构师、项目经理、技术总监、质量部门经理。对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人,效果最佳。

课程目标: 切实有效地提高员工设计开发水平,从而有效地改善软件设计质量

费用说明:

咨 / 询 / 热 / 线 18898361497

在线咨询

软件设计模式与软件重构实战训练营所有班级

温馨提示:为了保证课程质量,每期报名人数有限,需提前预约。点击预约

软件设计模式与软件重构实战训练营课程介绍

一、 课程安排

第1-2天    软件设计模式授课内容

**部分 高质量软件设计


**章 什么是高质量的软件设计情景剧:软件设计焦虑症

1. 上次的设计太糟糕了,痛下决心以后要好好设计

2. 再次进行软件设计时却不知道该怎样设计

1) 思考了很多,不知如何下手

2) 需求一变更,重新回到了糟糕的状态

探讨:如何进行高质量的软件设计

什么是高质量的软件设计

1. 软件的质量保证:内部质量与外部质量

2. 高质量软件设计的标准:易读、易于维护、易于变更



第二章 软件设计原则易于阅读:

1. 规范代码、编写注释与表明动机

案例:代码编写范例与简便易行的方法

2. 领域驱动设计


易于维护与变更

1. 互联网 带来的挑战

1) 系统需要不断地技术升级与改造

2) 传统行业必须向互联网转型

3) 但技术变革不是换零件那么简单

4) 剖析应对技术变革的方案

2. 案例讲解软件设计原则

1) 低耦合

a. 依赖反转原则(DIP)

案例:购票业务类与数据访问类

b. 开放-封闭原则(OCP)

案例:需求变更与可扩展点设计

案例:Square/Circle的解决方案

c. 里氏替换原则(LSP)

案例:Rectangle/Square的问题

案例:查询参数传递类的问题

2) 高内聚

案例:评审系统的设计

a. 单一职责原则(SRP)

案例:财务凭证变更带来的问题

案例:超级大函数与大对象的难题

案例:MySQL读写分离的改造过程

b. 信息专家模式

c. 不要重复自己原则(DRY)

典型的代码重复案例

探讨代码复用的难题


探讨软件设计模式:

1. 设计模式的由来

2. 设计模式的发展

3. 设计模式对高质量软件设计的作用


第二部分 软件设计模式


第三章 适配器模式什么是适配器模式

1. 软件设计中外部接口的难题

2. 第三方框架带来的设计难题

3. 适配器模式及其概念


适配器模式的应用

1. 适配器模式解决第三方框架带来的难题

案例:Hibernate适配器的设计

2. 适配器模式解决外部接口的设计难题

案例:第三方支付接口的设计

案例:财务数据接口的设计



第四章 策略模式什么是策略模式

1. 工资发放功能遇到的难题

1) 工资发放功能**初的设计及其问题

2) 对问题的分析过程及其新的设计思路

2. 策略模式及其概念


策略模式的应用

1. 案例:工资发放功能设计改进的过程

1) 工资发放功能的Java实现

2) 工资发放功能的C 实现

2. 案例:数据导出功能的设计实现

1) 深入理解开放-封闭原则

2) 数据导出功能的变更与改进过程

3. 案例:财务凭证生成功能的设计过程

1) 财务凭证生成功能的初始需求与设计

2) 财务凭证生成功能的扩展与分析过程

3) 财务凭证生成功能的**终设计

4) 深入理解单一职责原则

5) 学习“两顶帽子”的设计方式

练习:财务凭证生成功能的设计与实现




第五章 工厂模式探讨软件设计中遇到的难题

1. 依赖反转原则的设计难题

2. 开放-封闭原则的设计难题

3. 探讨工厂模式的本质


简单工厂模式

1. 简单工厂模式的C 实现

2. 基于配置的简单工厂模式

3. 剖析简单工厂如何实现依赖反转原则

案例:剖析Spring的beanFactory

4. 解读工厂模式对设计的重大意义

5. 讲解如何创建一个工厂

1) 创建工厂的步骤与关键点

2) 利用Spring框架简化工厂类的设计

案例:数据导出功能的工厂实现


工厂方法模式

1. 工厂方法模式的概念

2. 工厂方法模式的应用

案例:SAX框架的工厂类设计


抽象工厂模式

1. 抽象工厂模式的概念

2. 抽象工厂模式的实现

案例:标签库的设计改进过程

1) **初的标签库设计

2) 运用简单工厂的标签库设计

3) 运用工厂方法的标签库设计

4) 运用抽象工厂的标签库设计

5) **终基于配置的标签库设计





第六章 单例模式什么是单例模式

1. 设计工厂类面临的问题

2. 单例模式及其概念

3. 如何实现单例模式


单例模式的应用

1. 单例模式带来的设计变革

1) 充血模型vs.贫血模型

2) 探讨单例模式与性能问题

2. 单例模式改变了很多软件的设计


第七章 原型模式什么是原型模式

1. 工厂类在提供产品时遇到的设计问题

2. 原型模式及其概念


原型模式的设计实现

案例:函数调用的无副作用问题

案例:JavsScript中的原型模式


第八章 模板方法模式什么是模板方法模式

1. 煮咖啡给我们的启示

2. 设计工厂类的新思路

3. 模板方法模式及其概念


模板方法模式的作用与技巧

案例:一个工厂模板的设计与实现

深入理解不要重复自己原则

1. 重复代码带来的严重后果

2. 散弹式修改及其解决思路

3. 探讨实现代码复用的难题

4. 代码复用在不同场合采用的方法

5. 模板方法模式在代码复用中的作用



第九章 装饰者模式什么是装饰者模式

1. 业务量增长带来的多数据源问题

2. 运用装饰者模式巧妙解决多数据源问题

3. 装饰者模式及其概念


装饰者模式的应用

案例:多数据源的设计实现

1. 多数据源问题的分析设计过程

2. 多数据源的设计与实现

案例:商城收银系统的设计变更过程

1. 商城收银系统期初的设计

2. 混合策略的设计与实现

3. 多层装饰者的设计与实现

重新理解里氏替换原则

1. 透明的功能扩展

2. 里氏替换原则

练习:商场收银系统的2种设计与实现



第十章 桥接模式什么是桥接模式

1. 对象继承的泛滥

2. 桥接模式及其概念


桥接模式的应用

案例:员工管理与工资发放的设计

1. 员工管理与工资发放带来的继承泛滥问题

2. 采用桥接模式的设计与实现

案例:查询支持类的设计

1. 查询支持类遭遇的继承泛滥问题

2. 查询支持类的解决方案

3. 单例模式下查询支持类的设计

深入体会单一职责原则



第十一章 享元模式什么是享元模式

1. Hibernate是怎样访问数据的

2. 享元模式及其概念


享元模式的应用

案例:数据缓存的设计实现

案例:享元模式在大数据中的应用



第十二章 其它设计模式观察者模式:JobHunter的情景剧

代理模式:老板与秘书的差异

命令模式:像工作流一样处理业务

外观模式:超级家庭影院的烦恼

构建器模式:SQL Builder的设计

组合模式:如何构建一棵树

中介者模式:QQ在沟通中的作用

迭代器模式:如何顺序访问一个集合







**部分 为什么软件需要及时重构**单元

剖析软件质量不断下降的根源质量不断下降的表现:

1. 程序代码越来越乱

2. 软件维护成本越来越高

3. 软件变更越来越困难

4. 无法进行新技术的改造

以往采取的措施:

1. 头痛医头,脚痛医脚

2. 抛弃掉重新编写

3. 因担心未来变化而做的过度设计

带来的问题

1. 团队成员越来越多但效率却越来越低

2. 测试变得越来越困难而任务繁重

3. 软件系统越来越笨重而不适应未来变化

分析与反思


案例分析:一个遗留系统的演化过程

1. 起初的设计

2. 随后的变更

3. 质量不断下降的过程

软件质量下降的根源:

1. 软件总是因变更而变得越来越复杂

2. 软件结构已经不再适应复杂的软件需求

3. 必须要调整软件结构以适应新的软件需求


软件是因需求变更而质量下降吗?

案例分析:推演软件变更的设计过程

应对软件变更的**方式:两顶帽子

1. 重构原有代码以适应新的需求

2. 实现新的需求

案例:演示两顶帽子的设计过程

案例:财务凭证生成程序的设计过程

第二单元

高质量的软件设计过程案例讲解软件设计原则

1. 低耦合

1) 依赖反转原则(DIP)

案例:购票业务类与数据访问类

2) 开放-封闭原则(OCP)

案例:需求变更与可扩展点设计

案例:Square/Circle的解决方案

3) 里氏替换原则(LSP)

案例:Rectangle/Square的问题

案例:查询参数传递类的问题

2. 高内聚

1) 单一职责原则(SRP)

案例:财务凭证变更带来的问题

案例:超级大函数与大对象的难题

案例:MySQL读写分离的改造过程

2) 信息专家模式

3) 不要重复自己原则(DRY)

4) 典型的代码重复案例

5) 探讨代码复用的难题


以往软件设计的过程:

3. 演示以往软件设计的过程

4. 剖析以往软件设计的问题与风险


小步快跑模式的开发过程:

1. 用**快的速度开发一个**核心的功能

2. 让**个版本运行起来并可以验证

3. 在**个版本的基础上不断添加功能:

a. 每次只添加一个很简单、很单一的功能

b. 每次以两顶帽子的方式添加新功能

c. 运行、调试与验证

d. 重复这个过程添加下一个功能

4. 复杂的系统就是由一次次正确开发的不断积累而成


案例:演示小步快跑的开发过程

小步快跑解决的问题:

1. 复杂功能有效地解耦

2. 代码编写总是可测试与验证

3. 简化设计与思考的复杂度

4. 适时重构以避免软件退化

案例:数据推送程序的设计过程


第二部分 如何进行软件重构第三单元

何为重构软件重构的概念

1. 重构是一系列代码的等量变换

案例:一个Hello World重构过程

2. 重构的保险索:自动化测试

案例:Hello World的自动化测试过程

3. 软件修改的四种动机——重构的价值

4. 一个真实的谎言——重构的误区

5. 重构的主要方法与技巧


案例分析:重构一个大型遗留系统

1. 重构**步:分解大函数

超级大函数及其危害

案例:演示大函数产生的过程

案例:演示抽取方法操作步骤

实践抽取方法会遇到的问题和解决方案

2. 重构第二步:拆分大对象

超级大对象及其危害

案例:演示超级大对象的产生过程

案例:演示抽取类的操作步骤

讲解单一职责设计原则

案例:演示“分久必合,合久必分”的重构过程

3. 重构第三步:提高复用率

讲解顺序编程及其危害

“不要重复代码”原则

案例:提高代码复用的6个方法

案例:演示新增代码时的代码复用过程

用静态检查工具检查重复代码

4. 重构第四步:可扩展设计

过度设计 vs. 恰如其分的设计

讲解“开放-封闭”的设计原则

案例:讲解可扩展设计的4个方法

案例:讲解新增代码的可扩展设计过程

5. 重构第五步:降低耦合度

案例:讲解接口、实现与工厂模式

案例:讲解外部接口解耦与适配器模式

6. 重构第六步:系统分层

反思软件架构需要怎样的分层结构

遗留系统如何拥抱需求变化

遗留系统如何应对技术变革

7. 重构第七步:领域驱动设计

领域驱动设计的概念

讲解领域模型分析方法

案例:智能温控器分析设计过程(嵌入式 物联网)

1) **初的领域驱动设计过程

2) 需求变更的领域驱动设计

3) 面向物联网的架构演进


练习:重构一个小程序并编写测试脚本


第四单元

关于重构的讨论什么时候重构

1. 重构是一种习惯

2. 重构让程序可读

3. 重构,才好复用

4. 先重构,再扩展

5. 紧急任务时的重构


测试的困境

1. 重构初期的困局

2. 解耦与自动化测试

3. 建立自动化测试体系


重构的评价

1. 评价软件质量的指标

2. 评价软件质量的工具












点击在线咨询 在线咨询 电话咨询 电话咨询

咨询热线:

18898361497

扫二维码 扫二维码 二维码 返回
顶部