重构

1 为什么软件需要及时重构

1.1 软件腐烂——重构的必要性

1.软件从业者的反思:软件腐烂

1.软件腐烂(Software rot),也叫做代码腐烂(code rot)或软件腐朽(software decay)。它描述了随着时间流逝感知软件的缓慢衰退,其将最终导致它变得不完善、不可使用或难以维护
2.软件腐烂(Software rot)有两种形式:
  1)隐匿的腐烂:随着剩余的应用程序的改变变得不能用,软件逐渐不再被使用。不再被使用的软件有大约一年的半衰期。
  2)活动的腐烂:软件随着不断地被修改趋向于失去它的完整性
3.破窗效应与技术债务
4.案例演示:
  1)通过演示大型项目,随着客户需求的变化,导致软件结构混乱。为什么?软件腐烂的原因?

2 重构

2.1 何为重构

1.重构

1.重构的概述
2.何时重构
3.重构的误区
4.重构是持续进行的,不要先编写烂代码,再抽出重构
5.如何发现哪些地方需要重构
6.如何保证重构的正确
7.如何测试重构
8.通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,最后如何验收)

2.案例——通过实际项目演示重构

1.介绍项目需求情况,进行设计
2.阅读代码指出代码坏症状
3.通过重构逐步改善代码质量
4.通过案例演示重构的过程,我们遇到的难处,如何解决

3.重构关键——代码的坏味道

1.代码坏味道的概述
2.代码坏味道分类
3.识别代码坏味道,是重构的最重要的一步
4.所谓重构,无非就是嗅到坏味道,然后,一小步一小步的改。问题是,很多人对坏味道的容忍度让他们嗅不到代码的坏味道
5.案例分析——通过真实项目的代码,分析代码的坏味道

2.2 重构

1.重构

1.重构手法概述
2.简要演示重构的主要手法
3.使用IDE重构工具进行重构
4.通过案例演示如何通过重构工具完成重构

2.Rhythm of Refactoring- baby step

1. Baby steps involve making a few code changes and then checking your work by running tests. Typical refactorings take seconds or minutes to perform
2. The Rhythm of Refactoring goes like this:
  1) Verify that all automated tests (micro tests) pass
  2) Decide what code to change
  3) Implement one or more refactoring carefully
  4) Run the microtests whenever you wish to confirm that changes have not  altered system behavior
  5) Repeat until the refactoring is complete or revert to an earlier state

2.3 重构难题

1.重构技术难题

1.如何发现重构点
2.知道重构的目标(结果)
3.如何去重构——重构实践
4.如何保证重构的正确性——单元测试

2.重构业务难题

1.重构手法概述
2.简要演示重构的主要手法

3 重构实战1——函数相关重构

3.1 函数重构

1.函数的重构
2.巨型函数的种类
  1)项目列表式巨型方法
  2)锯齿状巨型方法
3.分解函数
4.助手方法提取
5.利用自动重构对付巨型方法
6.利用手工重构对付巨型方法
7.引入感知变量
8.函数依赖收集
9.分解助手方法和方法对象
10.通过案例介绍长函数的重构最佳实践

3.2 函数策略和技巧

1. Refactoring Strategy: Piecemeal Refactoring
2. Refactoring Strategy: Divide & Conquer
3. Refactoring Strategy: Narrowed Change
4. Refactoring Strategy: Parallel Change
5. Refactoring Strategy: Unified Methods
6. Refatoring Strategy: Evolved Target
7. Refatoring Strategy: Graceful Retreat
8. Refatoring Strategy: Gradual Cutover
9. Refatoring Strategy: Preparing for Change
10. Refatoring Tactic: Rejected Parameter
11. Refatoring Tactic: Caller Swap
12. Refatoring Tactic: Encapsulated Dependency

4 重构实战2——类重构

4.1 类重构

1. 重构大类
2. 对象的职责重构
3. 职责的识别
  1)方法分组
  2)观察隐藏方法
  3)寻找可以更改的原因
  4)寻找内部关系
  5)主要职责
  6)接口分离——接口隔离原则
4.提取类和接口
5.通过案例介绍如何重构巨大的类

5 重构实战3——重构到模式

5.1 重构到模式

1.通过项目分析重构到模式的手段
2.构造Tempalte Method
3.以Composite取代一/多之分
4.引入Null Object 
5.用Adapter统一接口
6.用Factory Method引入多态创建
7.通过案例介绍如何重构原始设计方法,演示如何通过重构导入设计模式

6 重构实战4——模块/组件重构

6.1 模块重构

1.优良的系统设计意味着我们把系统分割成一个个可以单独部署的组件,单独部署意味着如果更改了一个组件,我们也不需要重新部署其他组件
2.组件和包的坏味道
3.模块之间解耦
4.组件的内聚性实践
5.组件的依赖性实践
6.企业应用系统组件设计最佳实践
7.分析某项目,演示模块重构,如何在大型应用系统进行模块重构

7 重构实战5——数据库重构

7.1 数据库重构

1.数据库重构过程

1.验证数据库重构是否合适
2.选择最合适的数据库重构
3.让原来的数据schema过时
4.前测试、中测试和后测试
5.修改数据schema
6.迁移源数据
7.重构外部访问程序
8.运行回归测试
9.对工作进行版本控制
10.结束此次重构
11.分析多年遗留的复杂项目,演示如何重构数据库,数据库重构的一般步骤,和普通的应用程序代码的重构的不同点

2.数据库重构策略

1.小的变更更容易进行
2.唯一地标识每一次重构
3.通过许多小变更实现一次大变更
4.建立数据库配置表
5.触发器优于试图或批量同步
6.选择一个足够长的转换期
7.简化数据库变更控制委员会策略
8.简化与其他团队的协商
9.封装对数据库的访问
10.能够容易地建立数据库环境
11.不要复制sql
12.将数据库资产置于变更控制之下
13.通过多个大型项目的数据库重构策略,分析在不同的数据库坏味道下,使用不同的重构策略

8 安全重构——构筑重构测试体系

8.1 单元测试——构筑测试体系

1.理解单元测试

1.理解单元测试
2.单元测试框架提供了什么功能
3.好的测试是什么样子
4.为什么要写单元测试,为什么不写
5.为什么要写好的单元测试
6.分析真实项目,如何做单元测试

2.构筑测试体系

1.单元测试中的坏味道
2.让测试容易被看懂的模式
3.让测试容易维护的模式
4.让测试被信得过的模式
5.重构单元测试,改进代码设计
6.如何在集成与单元、黑盒或白盒、Mock和非Mock之间做选择
7.结合多个案例项目进行分析,分析什么是好的单元测试

8.2 重构管理

1.重构的恐惧心理
2.重构勇气
3.安全重构和祈祷式重构
4.安全重构保证
  1)依赖编辑器
  2)签名保持
  3)单一目标
  4)依赖编译器
  5)个人的能力
  6)代码审查
  7)单元测试
  8)验收测试
  9)人工测试
5.通过案例如何保证重构的正确性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 《重构》读书笔记 总览 第一部分 第一章从实例程序出发,展示设计的缺陷,对其重构可以了解重构的过程和方法。 第二部...
    白桦叶阅读 2,371评论 2 5
  • 第1章 重构,第一个案例 代码块俞小,代码的功能就俞容易管理,代码的处理和移动也就俞轻松。(功能也就越单一) 任何...
    Sheh伟伟阅读 903评论 0 2
  • 有一本书叫做《重构 改善既有代码的设计 》,个人感觉写的还蛮不错的,在读这本书时候做的一些读书笔记,分享给大家: ...
    我本小生的随笔阅读 824评论 0 2
  • 简悦直播教练恬源阅读 254评论 0 8
  • 仙游是个好地方。这人说话的时候,写了字纸递过来,果然是好一笔周正端雅的字。忍不住看了好几遍。 因此有了话题。 这个...
    铭玥咏全阅读 140评论 0 1