『重构--改善既有代码的设计』读书笔记----第2章:重构的原则

1、何为重构

 

重构(名词): 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

 

重构的定义,有两方面:

a.重构的目的是使软件更容易被理解和i需改。

b.重构不会改变软件可观察的行为——重构之后软件功能一如以往。

 

两顶帽子

 

添加新功能,以及重构。

 

在添加新功能的时候,要知道你现在只管添加功能,不要修改既有代码。

在重构的时候,只要修改既有的代码,不要去添加新的功能。

 

这两种情况可以互相转换,在动手的时候要明确自己是出于哪种状况!

 

2、为何重构

 

a.重构改进软件设计

b.重构使软件更容易理解

c.重构帮助找到bug

在进行重构的时候,会深入理解代码的行为,并恰到好处地把新的理解反馈回去。搞清楚程序结构的同时,也清楚自己做的一些假设,想不把bug揪出来都难。

d.重构提高变成速度

 

3、何时重构

 

可以采用 三次法则

准则:第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该重构。

 

事不过三,三则重构。

 

a.添加功能时重构

b.修补错误时重构

c.复审代码时重构(很多公司不一定有复审该环节)

 

为什么重构有用

 

有四个原因会让程序难以相与:

a.难以阅读的程序,难以修改;

b.逻辑重复的程序,难以修改;

c.添加新行为时需要修改已有代码的程序,难以修改;

d.带复杂条件逻辑的程序,难以修改。

因此,我们希望程序:1)容易阅读;2)所有逻辑都只在唯一地点指定;3)新的行为不会危机现有行为; 4)尽可能简单表达条件逻辑。

 

4、怎么和经理说

 

很多经理嘴巴上说自己“质量驱动”,其实更多的是“进度驱动”。

 

这种情况下,有一个较有争议的建议:不要告诉经理!

 

受进度驱动的经理要我尽可能快速完事,至于怎么完成,那就是我的事了。我认为i最快的方式就是重构,所以我就重构。

 

间接层和重构

 

计算机科学是这样一门科学:它相信所有问题都可以通过增加一个间接曾来解决。 —— Dennis DeBruler

 

但是,间接层是一把双刃剑。每次把一个东西分成两份,你就需要多管理一个东西。

 

间接层的某些价值:

a.运行逻辑共享。比如说一个子函数在两个不同的低点被调用,或超类种得某个函数被所有子类共享。

b.分开解释意图和实现。你可以选择每个类和函数的名字,这给了你一个解释自己意图的机会。

c.隔离变化。很可能我在两个不同地点使用同一对象,其中一个地点我想改变对象行为,但如果修改了它,我就要冒同时影响两处的风险。

d.封装条件逻辑。对象有一种奇妙的机制:多态消息,可以灵活而清晰地表达条件逻辑。将条件逻辑转换为消息形式,往往能降低代码的重复、增加清晰度并提高弹性。

 

5、重构的难题

 

a.数据库

重构经常出问题的一个领域就是数据库。绝大多数商用程序都与它们背后的数据结构紧密耦合在一起,这也是数据结构如此难以修改的原因之一。

b.修改接口

关于对象,另一件重要事情是:它们允许你分开修改软件模块的实现和接口。你可以安全地修改对象内部实现而不影响他人,但对于接口要特别谨慎——如果接口被修改了,任何事情都有可能发生。

c.难以通过重构手法完成的设计改动

比如在一个项目中,我们很难(但还是有可能)将不考虑安全性需求时构造起来的系统重构为具备良好安全性系统。

d.何时不该重构

重写(而非重构)的一个清楚讯号就是:现有代码根本不能正常运作。你可能只是试着做点测试,然后就发现代码中满是错误,根本无法稳定运作。记住,重构之前,代码必须起码能够在大部分情况下正常运作。

另外,如果项目已尽最后期限,也应该避免重构。

 

7、重构与性能

 

三种编写快速软件的方法:

a.其中最严格的是时间预算法,这通常只用于性能要求极高的实时系统。

b.第二种就是持续关注发。这种方法要求任何程序员都在任何时间做任何事时,都要设法保持系统的高性能。

c.第三种性能提升法就是利用上述的90%统计数据。采用这种方法时,你编写构造良好的程序,不对性能投以特别的关注,直至进入性能优化阶段——那通常是在开发后期。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良月柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值