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

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
Forbes - Security
Forbes - Security
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
V
Visual Studio Blog
月光博客
月光博客
博客园 - Franky
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
The Register - Security
The Register - Security
S
SegmentFault 最新的问题
博客园 - 司徒正美
P
Proofpoint News Feed
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
Arctic Wolf
Cyberwarzone
Cyberwarzone
Simon Willison's Weblog
Simon Willison's Weblog
U
Unit 42
P
Proofpoint News Feed
Scott Helme
Scott Helme
MyScale Blog
MyScale Blog
T
Tenable Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
小众软件
小众软件
C
CERT Recently Published Vulnerability Notes
P
Palo Alto Networks Blog
V
V2EX
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tailwind CSS Blog
V
Vulnerabilities – Threatpost
Latest news
Latest news
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
Intezer
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
博客园 - 【当耐特】
B
Blog RSS Feed
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
NISL@THU
NISL@THU
C
Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security

博客园 - Daniel

Interop .NET and J2EE via WebService Contract-first approach 送一点GMail的邀请 运用PreviousPage简化提交流程 从CodeBehind访问页面上的控件(2.0) 一个用户故事的样例(极限编程) 生成Excel报表的最直观方法 给还未曾尝试过Microsoft Enterprise Library的朋友们 渴望XP-勇气篇 渴望XP-测试篇 全球6大广告集团 Vista for developers 渴望XP-简单篇 LINQ-sql的终极疯狂 渴望XP-结对篇 真的需要Smart Client吗? Longhorn之三剑客 Oracle sqlplus语句编辑命令 在Oracle 9i isqlplus中使用替换变量 Oracle 9i的isqlplus你用过了吗?
渴望XP-重构篇
Daniel · 2005-09-26 · via 博客园 - Daniel

重构一词时下颇为流行,各路IDE都纷纷集成Refactor功能,VB.NET的那个Refector插件更是让人眼前一亮,不过在五彩缤纷的重构工具面前,我的想法还是思想起决定性作用,工具只是形式,更何况最有价值的重构是无法通过工具完成的。

首先,为什么要重构?
XP的一条主要原则是简单,而简单意味着代码很难始终适应业务逻辑的变更和程序规模的膨胀,重构是不可避免的。所以重构也是简单原则得以实践的重要保障。积极重构作为XP的重要教条之一,希望程序员在尽可能多的情况下去重构代码,以优化代码的质量,提高代码的可读性和可维护性。例如有些代码在开发初期并没有意识到其公用性,随着项目的进行,发现类似的功能在多处实现,XP的原则是不在最初就去揣测可能的公用方法,直到发现其公用性后再予以抽出,而且是积极地抽出。与此相比,体系架构的重构更为痛苦和繁琐,这就不是单纯能靠Refactor工具所能达成的了。这就引出了下一个问题:如何保证成功地重构?

XP提倡的积极重构由两大基础予以支撑-“勇气”和“测试”。在很多情况下,程序员面对业务逻辑重构往往充满恐惧,不仅因为重构的工作量,同时也存在着对重构之后系统是否仍能够正常工作的担忧,于是乎头痛医头,脚痛医脚,原本逻辑清晰的程序被打上重重补丁,满目疮痍。业务逻辑重构通常牵涉多个代码文件,此时千万不可被可能的重构工作量吓倒,充满勇气推翻先前的代码,并不断告诉自己,长痛不如短痛,今天的重构很有可能会避免日后更大规模的重构,优质的代码就是这样产生出来的。当然,光有心理上的勇气绝对无法造就优秀的代码,更需要技术上的保障,那便是“单元测试”。无论哪位程序员对代码做过什么样的修改,只要最终所有的单元测试都能跑通,那他/她的重构就是成功的。通过单元测试这一有力的基石,为程序员大胆重构给予了现实保障。关于单元测试,下一篇文章中予以详细说明。

XP之所以能达到比较高的代码质量,其重要原因之一便是程序员持续地重构代码,通过持续集成保证不仅代码可以正常运作,而且具有比较高的质素。不过积极重构也并不是在所有场合都适用的。首先,如果开发团队对提高代码质量没有任何兴趣,那重构对他/她们的意义就很小;另一种情况是明天就要交付一个build,完成一次迭代,此时进行重构可能会影响项目的进展,所以XP提出延迟重构,即将重构任务放到下一次迭代中完成,若重构工作量的确很大,甚至可以将重构单独列为一个任务,记如下一次的迭代计划中。

一方面希望程序员能抛开浮躁的开发心情,另一方面也希望项目管理人员、企业能更多地考虑软件的质量而不是单纯的工程周期,始终把维护成本和时间都计算在内,创造一个鼓励重构的大环境。