一
.
重构原则
1.重构的定义
重构
(
名词
):
对软件内部结构的一种调整
,
目的是在不改变
"
软件之可察行为
"
前提下
,
提高其可理解性
,
降低其修改成本
.
重构
(
动词
):
使用一系列重构准则
(
手法
),
在不改变
"
软件之可察行为
"
前提下
,
调整其结构
.
两种定义都强调是在不改变
"
软件的外部行为
"
前提下
,
不改变
"
软件之可察行为
"
就是说让修改不影响外部使用程序
(
程序员
),
在个外部来看
,
程序的行为和结果没有任何的变化
.
重构只是对程序内部结构进行调整
,
让代码更加容易理解
,
然后更容易维护
.
2.重构的好处
能改进软件设计
使软件更容易被理解
能帮你找到
bug
提高软件的开发速度
3.什么时候进行重构
三次法则
:
事不过三
,
三则重构
.
意思是说
,
一件事情
,
第一次只管去做
,
第二次做类似的事情会产生反感
,
但无论如何还是做了
,
第三次再做类似的事情
,
你就应该重构
.
在添加新功能时进行重构
.
在修改
bug
时进行重构
在代码复审时进行重构
.
4.为什么重构有用
难以修改的程序具有以下特征
:
难以阅读的程序
,
难以修改
逻辑重复的程序
,
难以修改
添加新行为时需要修改现有的代码
,
难以修改
带复杂条件逻辑的程序
,
难以修改
好的程序应该是
:
容易阅读
所有逻辑都只在惟一地点指定
新的改动不会危及现有的行为
尽可能简单的表达条件逻辑
5.间接层和重构
间接层的存在的价值
:
允许逻辑共享
分开解释意图和实现
将变化加以隔离
将条伯逻辑加以编码
但是过多的间接层会导致代码的层次太深
,
使代码难以阅读
.
因些要权衡加入间接层的利弊
.
6.重构的难题
关系数据库与面向对象编程的问题
:
在对象模型和数据库模型之间插入一个分隔层
,
这就可以隔离两个模型各自的变化
.
升级某一模型时无需同时升级上述的分隔层即可
.
这样的分隔层会增加系统复杂度
.
但是能增加灵活度
.
修改接口的问题
:
修改已发布的接口
,
因为已发布的接口会供外部人员
(
其它公司
)
使用
,
因此
,
修改接口会导致引用接口的其它程序不修改程序就无法运行
.
修改接口的最好的办法是增加一个新的接口
,
让旧接口调用新接口
.
这样原来的程序就不用修改了
.
对于接口的另一个建议是心尽量不要发布接口
.
7.什么时候不进行重构
现有的程序无法运行
,
此时应该是重写程序
,
而不是重构
程序到了最后的交付期限
8.重构与设计
重构与设计是互补的
,
程序应该是先设计
,
而在开始编码后
,
设计上的不足可以用重构来弥补
.
设计应该是适度的设计
,
而不必过度的设计
.
如果能很容易的通过重构来适应需求的变化
,
那么就不必过度的设计
,
当需求改变时再重构代码
.
9.重构与性能
提高性能的三种方法
:
时间预算法
:
在设计时就对程序花费的时间进行预算
,
通常用于性能要求极高的实时系统
.
普通的企业应用程序一般对性能要求不高
.
只要不太慢就可以了
.
持续关注法
:
要求程序员在任何时间都要设法保持系统的高性能
.
这个方法有个缺陷
,
就是大部分的程序
90%
的优化工作都是白费劲
,
这样会浪费大量的时间
.
良好的分解方式
:
这个方式是在开发程序阶段不对性能投以任何关注
,
直到进入性能优化阶段
,
再分析程序中性能差的程序
,
然后对这些程序进分解
,
查出性能差的程序
,
进行优化
.