重构---让今天更有价值,让明天更美好
2015-04-29 15:18
330 查看
一、三次法原则
第一次去做某件事时尽管去做;第二次做类似的事会产生反感;第三次再做类似的事,你就应该重构。
事不过三,三则重构
二、重构时机
任何情况下都要极力反对专门拨出时间进行重构,重构应该随时随地的进行;重构的原因是你想做别的事,而重构可以帮助你把哪些事情做好。
1.添加功能时重构(设计原则:对扩展开放,多修改闭合)
重构能够帮助我们理解即将扩展的代码,对既有代码有清晰的认知,帮助我们准确快速实现新功能。
在现有代码设计对扩展支持较差的前提下,重构代码,会优化既有程序的设计,使扩展简单。
2.修补错误时重构
当收到错误报告时,这就是我们修要重构代码的信号,因为显然代码逻辑是不清楚的-----没有清楚到在一开始就能够规避错误。
重构优化代码设计,让代码更具可读性,维护更容易。
3.复审代码时重构
让更有经验的人帮助复审代码,提出设计的宝贵意见,重偶之后就会是代码设计更合理、更健壮。
三、重构程序原因
未重构的程序:
1.难以阅读的程序
2.逻辑重复的程序
3.扩展新功能需要修改已有代码和框架的程序
4.带复杂条件(if else/switch case)逻辑的程序
重构后的程序
1.容易阅读
2.所有逻辑都只在唯一地点指定
3.对修改关闭,对扩展开放。新需求的实现不会影响既有设计和行为
4.经可能简单的表达条件逻辑(多太消息,设计模式)
四、间接层和重构
间接层:在软件设计或者重构过程为了程序具有更好的架构而增加的托管层
间接层是一柄双刃剑,为了使程序架构对扩展开放,往往会增加较多的中间层,但是这样会导致程序愈加难以阅读,因此在设计和重构的时候,就要权衡利弊,去掉不必要的间接层,保存提高程序价值的间接层。
间接层的价值:
1.逻辑共享
比如说超类的函数被所有子类共享(间接层就是超类,管理子类)
2.分开解释意图和实现
3.隔离变化
可能我们在两个不同的地方使用同一对象,其中一个地方我想改变对象的行为,如果修改了它,我就要冒着同时影响两处的风险;
为此,我可以采用超类+子类的方式,让不同的子类对象具有不同的行为,并在需要的地方引用不同的子类对象,这样影响就缩小到了一处。
4.封装条件逻辑
对象有一种奇妙的机制:多态消息,可以灵活而清晰的表达条件逻辑。
五、重构行之有效的方法
1.在重构优化程序性能时,要有一个行之有效的度量工具,找出性能瓶颈点;记住任何事前的猜测都可能是错误的,Please show me the evidence。
2.将大块头软件重构为封装良好的小型组件。之后对各个组件重构或者重建。
3.先mvp(最小可行性产品),之后不断敏捷开发(重构和迭代)
第一次去做某件事时尽管去做;第二次做类似的事会产生反感;第三次再做类似的事,你就应该重构。
事不过三,三则重构
二、重构时机
任何情况下都要极力反对专门拨出时间进行重构,重构应该随时随地的进行;重构的原因是你想做别的事,而重构可以帮助你把哪些事情做好。
1.添加功能时重构(设计原则:对扩展开放,多修改闭合)
重构能够帮助我们理解即将扩展的代码,对既有代码有清晰的认知,帮助我们准确快速实现新功能。
在现有代码设计对扩展支持较差的前提下,重构代码,会优化既有程序的设计,使扩展简单。
2.修补错误时重构
当收到错误报告时,这就是我们修要重构代码的信号,因为显然代码逻辑是不清楚的-----没有清楚到在一开始就能够规避错误。
重构优化代码设计,让代码更具可读性,维护更容易。
3.复审代码时重构
让更有经验的人帮助复审代码,提出设计的宝贵意见,重偶之后就会是代码设计更合理、更健壮。
三、重构程序原因
未重构的程序:
1.难以阅读的程序
2.逻辑重复的程序
3.扩展新功能需要修改已有代码和框架的程序
4.带复杂条件(if else/switch case)逻辑的程序
重构后的程序
1.容易阅读
2.所有逻辑都只在唯一地点指定
3.对修改关闭,对扩展开放。新需求的实现不会影响既有设计和行为
4.经可能简单的表达条件逻辑(多太消息,设计模式)
四、间接层和重构
间接层:在软件设计或者重构过程为了程序具有更好的架构而增加的托管层
间接层是一柄双刃剑,为了使程序架构对扩展开放,往往会增加较多的中间层,但是这样会导致程序愈加难以阅读,因此在设计和重构的时候,就要权衡利弊,去掉不必要的间接层,保存提高程序价值的间接层。
间接层的价值:
1.逻辑共享
比如说超类的函数被所有子类共享(间接层就是超类,管理子类)
2.分开解释意图和实现
3.隔离变化
可能我们在两个不同的地方使用同一对象,其中一个地方我想改变对象的行为,如果修改了它,我就要冒着同时影响两处的风险;
为此,我可以采用超类+子类的方式,让不同的子类对象具有不同的行为,并在需要的地方引用不同的子类对象,这样影响就缩小到了一处。
4.封装条件逻辑
对象有一种奇妙的机制:多态消息,可以灵活而清晰的表达条件逻辑。
五、重构行之有效的方法
1.在重构优化程序性能时,要有一个行之有效的度量工具,找出性能瓶颈点;记住任何事前的猜测都可能是错误的,Please show me the evidence。
2.将大块头软件重构为封装良好的小型组件。之后对各个组件重构或者重建。
3.先mvp(最小可行性产品),之后不断敏捷开发(重构和迭代)
相关文章推荐
- 今天是个新的开始,明天一定会理美好!
- 这个世界只有偏执狂才能成功。马云曾说:“今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上。”坚持就是胜利!
- 马云语录:今天很残酷,明天更残酷!后天很美好!但大多数人都死在明天晚上,看不到后天的太阳!
- 今天很美好,明天很美好,后头很美好
- 今天很痛苦,明天更痛苦,后天很美好 2008-9-25 14:46:00 (21ic)
- PHP获取今天、昨天、明天的日期
- 预算不变的情况下如何为用户提供更有价值的IT软件系统支撑
- 今天多干活为了明天少心慌
- 今天事多,因为昨天事少;明天事少,因为今天事多
- 判“新”函数:得到今天与明天的秒数
- 产品经理进阶技能:个性化推荐,让信息更有价值
- 你所浪费的今天,是昨天死去的人奢望的明天。你所厌恶的现在,是未来的你回不去的曾经
- 卷首寄语:我们的今天,明天--致所有战斗在一线的同行们
- 社交网络的昨天、今天、明天
- 今天尽你的最大努力去做好,明天你也许就能做得更好
- 昨天,今天,明天
- YP推出比谷歌AdWords的更有价值的产品
- 今天最后一天上班,明天放假过年了,入职来总结
- 今天出差去石家庄,明天转去济南
- 点击今天和明天显示相应的内容