惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 洛客

IOS SDK 兼容性 研究 中国地址的英文翻译 WCF RIA Services DomainService life-cycle and adding Transactions Silverlight 3 RIA服务编程中使用自定义方法及服务操作 HP大中华区总裁孙振耀退休感言 C#泛型 Session莫名丢失的原因及解决办法 在SQL Server 2005中实现 Server.UrlEncode、Server.UrlDecode 商品條碼 让包装纸箱增加网店服务的附加值 - 洛客 男人30岁需要完成的事! 結婚照 我要结婚了 - 洛客 C#中如何实现对象拷贝 四舍五入 与 四舍六入五成双 网站优化——静态页面和动态页面的区别 - 洛客 网站优化—百度和google的一些优化特点 汕頭地方方言 Speed Up Your Site with the Improved View State in ASP.NET 2.0
重构的概念 - 洛客 - 博客园
洛客 · 2010-02-24 · via 博客园 - 洛客
  

重构的定义

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

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

  两种定义都强调是在不改变"软件的外部行为"前提下,不改变"软件之可察行为"就是说让修改不影响外部使用程序(程序员),在个外部来看,程序的行为和结果没有任何的变化.重构只是对程序内部结构进行调整,让代码更加容易理解,然后更容易维护.

  

重构的好处

  能改进软件设计使软件更容易被理解

  能帮你找到bug

  提高软件的开发速度

  

什么时候进行重构

  三次法则:事不过三,三则重构.意思是说,一件事情,第一次只管去做,第二次做类似的事情会产生反感,但无论如何还是做了,第三次再做类似的事情,你就应该重构.

  在添加新功能时进行重构.

  在修改bug时进行重构

  在代码复审时进行重构.

  

为什么重构有用

  难以修改的程序具有以下特征:

  难以阅读的程序,难以修改

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

  添加新行为时需要修改现有的代码,难以修改

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

  好的程序应该是:

  容易阅读

  所有逻辑都只在惟一地点指定

  新的改动不会危及现有的行为

  尽可能简单的表达条件逻辑

  

间接层和重构

  间接层的存在的价值:允许逻辑共享;分开解释意图和实现;将变化加以隔离;将条伯逻辑加以编码

  但是过多的间接层会导致代码的层次太深,使代码难以阅读.因些要权衡加入间接层的利弊.

  

重构的难题

  关系数据库与面向对象编程的问题——在对象模型和数据库模型之间插入一个分隔层,这就可以隔离两个模型各自的变化.升级某一模型时无需同时升级上述的分隔层即可.这样的分隔层会增加系统复杂度.但是能增加灵活度.

  修改接口的问题——修改已发布的接口,因为已发布的接口会供外部人员(其它公司)使用,因此,修改接口会导致引用接口的其它程序不修改程序就无法运行.修改接口的最好的办法是增加一个新的接口,让旧接口调用新接口.这样原来的程序就不用修改了.对于接口的另一个建议是心尽量不要发布接口.

  

什么时候不进行重构

  现有的程序无法运行,此时应该是重写程序,而不是重构程序

  到了最后的交付期限

  

重构与设计

  重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补.设计应该是适度的设计,而不必过度的设计.如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码.

  

重构与性能

  提高性能的三种方法:

  时间预算法——在设计时就对程序花费的时间进行预算,通常用于性能要求极高的实时系统.普通的企业应用程序一般对性能要求不高.只要不太慢就可以了.

  持续关注法——要求程序员在任何时间都要设法保持系统的高性能.这个方法有个缺陷,就是大部分的程序90%的优化工作都是白费劲,这样会浪费大量的时间.

  良好的分解方式——这个方式是在开发程序阶段不对性能投以任何关注,直到进入性能优化阶段,再分析程序中性能差的程序,然后对这些程序进分解,查出性能差的程序,进行优化