重构(改善既有代码的设计)-- 读书笔记1

    春节前后读了这本书,是一个同学推荐给我的,感觉还不错,文笔通俗易懂,结构清晰有逻辑。喜欢Kent Beck说的一句话“我不是个伟大的程序员,我只是个有着优秀习惯的好程序员”。读这本书,对重构获得了一些认识,一直没来得及整理(其实就是为自己的懒惰找借口),现整理如下。
1.什么是重构?
    所谓重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的几率。本质上说重构就是在代码写好之后改进它的设计。
    重构一词有两种不同的定义:
a. 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
b. 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

2.为什么要重构?
    重构是个工具,它可以用于以下几个目的:
a.重构改进软件设计;
b.重构使软件更容易理解;
c.重构帮助找到bug;
d.重构提高编程速度。

3.该在什么地方重构?
    重构不是一件应该特别拨出时间来做的事,不应该为重构而重构,之所以要重构是因为你想要做别的什么事,而重构可以帮助你把那些事做好,因此,重构应该随时随地进行。
a.三次法则:重复一件事第三次做的时候就应该重构;
b.添加功能时重构;
c.修补错误时重构;
d.复审代码时重构;

4.代码的坏味道
    下述所列的“坏味道条款”并不是何时必须重构的精确的衡量标准,但它们能够为你指引正确的方向。
a. Duplicated Code(重复代码)
b. Long Method(过长函数)
c. Large Class(过大的类)
d. Long Parameter List(过长参数列)

e. Divergent Change(发散式变化):一个类受多种变化影响
f. Shotgun Surgery(霰弹式修改):一种变化引发多个类相应修改
    (e和f两种情况都应该整理代码,使“外界变化”与“需要修改的类”趋于一一对应。)

g. Feature Envy(依恋情结):对象技术的全部要点在于:这是一种“将数据和对数据的操作行为包装在一起”的技术。有一种经典气味是:函数对某个类的兴趣高过对自己所处类的兴趣。我们的原则是:判断哪个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起。

h. Data Clumps(数据泥团):两个类中相同的字段、许多函数签名中相同的参数。这些总是绑在一起出现的数据应该拥有属于它们自己的对象。

i. Primitive Obsession(基本类型偏执):大多数编程环境都有两种类型的数据:结构类型允许你将数据组织成有意义的形式;基本数据类型则是构成结构类型的积木块。

j. Switch Statements(switch惊悚现身):面向对象程序的一个明显特征就是:少用switch(或case)语句。从本质上switch语句的问题在于重复。可以考虑用面向对象中的多态来替换switch语句。

k. Parallel Inheritance Hierarchies(平行继承体系)
l. Lazy Class(冗赘类)
m. Speculative Generality(夸夸其谈未来性)
n. Temporary Field(令人迷惑的暂时字段)
o. Message Chains(过度耦合的消息链)
p. Middle Man(中间人)
r. Inappropriate Intimacy(狎昵关系)
s. Alternative Classes with Different Interface(异曲同工的类)
t. Incomplete Library Class(不完美的库类)
u. Data Class(纯稚的数据类)
v. Refused Bequset(被拒绝的遗赠)
w. Comments(过多的注释)
     写到这里头已经痛到不行,都怪昨天晚上没吹头发就睡觉,还忘记关窗户,冷风冲我脑袋吹了一夜,加上中午又莫名其妙的没睡着午觉,脑袋疼的要炸了,真是作…剩下部分有关重构的方法的内容就放下下一篇博客中写吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值