首页
课程中心
专家团队
新闻中心
精彩活动
关于我们

课程中心

软件重构与软件设计模式

  • 课程时间:12月9日-12月11日
  • 主讲老师:范老师
  • 公开课费用:线下:5900;线上:4700
  • 课程地点:全国

软件重构是指在不改变软件功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造。简而言之,重构就是改进已经写好的软件的设计。在敏捷开发方法学中,重构常常是软件开发循环的一部分,开发者通过增加新的测试和功能,或者重构代码来改善内部的一致性和清晰性。重构也是代码维护中的一部分,既不修正错误,又不增加新的功能性,而是用于提高代码的可读性或者改变代码的结构和设计,使其在将来更容易被维护。特别是,在现有的程序的结构下,给一个程序增加一个新的行为会非常困难,因此开发人员可能先重构这部分代码,使加入新的行为变得容易。

 

培训要点

软件重构面临的背景都是相似的,程序员们为了快速完成需求和上线而写出了最基本的代码。然后在功能的不断扩充过程中,以打补丁的方式对代码进行扩充,中间还会面临着开发人员的变更和离职。逐渐地,代码就会变得越来越臃肿,渐渐地变得难以维护。

糟糕的软件代码会带来开发效率的降低,在糟糕架构下加入新功能,会大大影响新功能的代码质量,开发和调试时间都会成倍增加;其次是故障率的提升,在质量低下的代码中,总是容易隐藏着很多不易发现的坑,这些都会成为故障的隐患;同时,架构也会使得需求的完成大打折扣,使得设计好的目标,因为架构限制或者性能等原因,只能完成80%甚至更低。

随着不同产品的推出,不同客户、不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免。不仅如此,所有的软件系统,经过一段时间的维护,都会逐渐变成遗留系统,并且都遭遇了缓慢而不可抗拒的腐化。因此,软件开发人员不得不面对既有系统的混乱代码。

本课程首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“两顶帽子”的方式应对变更,拒绝腐化。站在实战的角度讲解高质量软件设计的“小步快跑”过程。接着,用真实案例讲解已经代码腐化的遗留系统是如何通过“软件重构七步曲”,由简入深、循序渐进地重构一个大系统。最后,以重构的角度进行实战,讲解软件如何在不断变更的过程中,运用设计模式来降低耦合,保持软件设计质量不退化。

 

培训特色

本课程注重实战,采用案例贯穿方式完成实践,针对项目过程中技术人员常遇到的误区进行汇总、研讨,以程序员的编程思维为前提,通过大量的真实案例,详细地介绍了重构需要注意的要点以及难点,这些全部都是讲师十几年经验的沉淀及总结。

本课程内容理论性与实践性都较强,采取讲课、讨论、实践三者结合的方式,1/3时间讲解核心思想,1/3时间动手重构实践,1/3点评分析总结,形成一整套解决问题的方法。

 

本课程有企业内训形式,授课老师、课程内容、教学方式均依据企业的培训需求灵活设置。

 

本网站内容包括并不限于课程介绍、课程大纲、上课照片、老师介绍等等资料及信息,未经允许不得抄袭和转载。

培训对象

注重实效的各类软件研发中心的负责人、设计师、架构师、项目经理、技术总监、质量部门经理、开发工程师等。

 

 

代码重构

设计重构

软件腐烂监控

重构管理

开发工程师

精通

了解

了解

了解

设计师

精通

精通

了解

了解

架构师

精通

精通

精通

精通

数据库工程师

了解

了解

/

/

质量管理

/

/

精通

精通

管理者

/

/

监控

了解

 

 

学员基础

具有项目设计、开发工作经验

l. 目前正在面临复杂遗留系统,需要维护和重构

2. 具有面向对象的基本概念,熟悉基本设计模式

培训内容

 

授课内容

第一部分 为什么软件需要及时重构

第一单元

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

质量不断下降的表现:

  1. 程序代码越来越乱
  2. 软件维护成本越来越高
  3. 软件变更越来越困难
  4. 无法进行新技术的改造

以往采取的措施:

  1. 头痛医头,脚痛医脚
  2. 抛弃掉重新编写
  3. 因担心未来变化而做的过度设计

带来的问题

  1. 团队成员越来越多但效率却越来越低
  2. 测试变得越来越困难而任务繁重
  3. 软件系统越来越笨重而不适应未来变化

分析与反思

 

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

  1. 起初的设计
  2. 随后的变更
  3. 质量不断下降的过程

软件质量下降的根源:

  1. 软件总是因变更而变得越来越复杂
  2. 软件结构已经不再适应复杂的软件需求
  3. 必须要调整软件结构以适应新的软件需求

 

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

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

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

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

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

 

第二单元

高质量的软件设计过程

以往软件设计的过程:

  1. 演示以往软件设计的过程
  2. 剖析以往软件设计的问题与风险

 

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

  1. 用最快的速度开发一个最核心的功能
  2. 让第一个版本运行起来并可以验证
  3. 在第一个版本的基础上不断添加功能:
  1. 每次只添加一个很简单、很单一的功能
  2. 每次以两顶帽子的方式添加新功能
  3. 运行、调试与验证
  4. 重复这个过程添加下一个功能
  1. 复杂的系统就是由一次次正确开发的不断积累而成

 

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

小步快跑解决的问题:

  1. 复杂功能有效地解耦
  2. 代码编写总是可测试与验证
  3. 简化设计与思考的复杂度
  4. 适时重构以避免软件退化

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

 

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

第三单元

何为重构

软件重构的概念

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

案例:一个Hello World重构过程

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

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

  1. 软件修改的四种动机——重构的价值
  2. 一个真实的谎言——重构的误区
  3. 重构的主要方法与技巧

 

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

  1. 重构第一步:分解大函数

超级大函数及其危害

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

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

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

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

超级大对象及其危害

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

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

讲解单一职责设计原则

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

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

讲解顺序编程及其危害

“不要重复代码”原则

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

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

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

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

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

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

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

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

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

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

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

案例:讲解继承泛滥问题与桥接模式

案例:讲解方法解耦与策略模式

案例:讲解过程解耦与命令模式

案例:讲解透明扩展与组合模式、装饰者模式

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

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

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

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

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

领域驱动设计的概念

讲解领域模型分析方法

讲解原文分析法与领域驱动设计

 

讨论:如何制定重构项目计划

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

 

第四单元

关于重构的讨论

什么时候重构

  1. 重构是一种习惯
  2. 重构让程序可读
  3. 重构,才好复用
  4. 先重构,再扩展
  5. 紧急任务时的重构

 

测试的困境

  1. 重构初期的困局
  2. 解耦与自动化测试
  3. 建立自动化测试体系

 

重构的评价

  1. 评价软件质量的指标
  2. 评价软件质量的工具

第三部分 运用设计模式实战软件重构

第五单元

适配器模式

适配器模式的应用

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

案例:Hibernate适配器的设计

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

 

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

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

 

第六单元

策略模式

策略模式的应用

  1. 案例:工资发放功能设计改进的过程
  1. 工资发放功能的Java实现
  2. 工资发放功能的C++实现
  1. 案例:数据导出功能的设计实现
  1. 深入理解开放-封闭原则
  2. 数据导出功能的变更与改进过程
  1. 案例:财务凭证生成功能的设计过程
  1. 财务凭证生成功能的初始需求与设计
  2. 财务凭证生成功能的扩展与分析过程
  3. 财务凭证生成功能的最终设计
  4. 深入理解单一职责原则
  5. 学习“两顶帽子”的设计方式

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

 

第七单元

工厂模式

探讨软件设计中遇到的难题

  1. 依赖反转原则的设计难题
  2. 开放-封闭原则的设计难题
  3. 探讨工厂模式的本质

 

简单工厂模式

  1. 简单工厂模式的C++实现
  2. 基于配置的简单工厂模式
  3. 剖析简单工厂如何实现依赖反转原则

案例:剖析Spring的beanFactory

  1. 解读工厂模式对设计的重大意义
  2. 讲解如何创建一个工厂
  1. 创建工厂的步骤与关键点
  2. 利用Spring框架简化工厂类的设计

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

 

工厂方法模式

  1. 工厂方法模式的概念
  2. 工厂方法模式的应用

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

 

抽象工厂模式

  1. 抽象工厂模式的概念

抽象工厂模式的实现

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

  1. 最初的标签库设计
  2. 运用简单工厂的标签库设计
  3. 运用工厂方法的标签库设计
  4. 运用抽象工厂的标签库设计
  5. 最终基于配置的标签库设计

 

第八单元

单例模式和原型模式

单例模式的应用

  1. 单例模式带来的设计变革
  1. 充血模型vs.贫血模型
  2. 探讨单例模式与性能问题
  1. 单例模式改变了很多软件的设计

 

原型模式的应用

  1. 工厂类在提供产品时遇到的设计问题
  2. 原型模式及其概念

原型模式的设计实现

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

案例:JavsScript中的原型模式

 

第九单元

模板方法模式

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

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

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

  1. 重复代码带来的严重后果
  2. 散弹式修改及其解决思路
  3. 探讨实现代码复用的难题
  4. 代码复用在不同场合采用的方法
  5. 模板方法模式在代码复用中的作用

 

第十单元

装饰者模式及桥接模式

装饰者模式的应用

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

  1. 多数据源问题的分析设计过程
  2. 多数据源的设计与实现

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

  1. 商城收银系统期初的设计
  2. 混合策略的设计与实现
  3. 多层装饰者的设计与实现

重新理解里氏替换原则

  1. 透明的功能扩展
  2. 里氏替换原则

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

 

桥接模式的应用

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

  1. 员工管理与工资发放带来的继承泛滥问题
  2. 采用桥接模式的设计与实现

案例:查询支持类的设计

  1. 查询支持类遭遇的继承泛滥问题
  2. 查询支持类的解决方案
  3. 单例模式下查询支持类的设计

深入体会单一职责原则

 

 

汇款、微信转帐

 

汇款信息:

单位名称:北京市海淀区中科院计算所职业技能培训学校

开户行:工行海淀西区支行

账号:0200 0045 1920 0043 667

开户银行代码:1021 0000 0458

 

微信转账:

    步骤一:打开微信,扫描二微码付款时,点击打开微信右下角里的“发现”,在列表界面有一个“扫一扫”选项,点击打开“扫一扫”(如下图):

    步骤二:点击打开“扫一扫”后,会出现一个扫描框,将中科院计算所培训中心二维码/条码放入框内,即可自动扫描,并显示支付信息,输入付款金额。

                                                                                                        

    (中科院计算所培训中心二维码)

 

    步骤三:点击 “添加付款备注”,填写付款人姓名和单位全称,所有信息核对无误后,点击“确认付款”,完成支付。

 

                

 

  • 注意:步骤三是为了尽快确认您的培训费用是否到帐,方便为您查帐,所以一定要把付款人姓名和单位名称填写完整,如果姓名和单位名称超过20个汉字,单位名称可以填写简称。

京公网安备 11010802025851号

 京ICP备14030124号-1  

QQ咨询

免费电话

010-82661221

微信咨询

微信客服

在线报名

返回顶部