登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

重构以求短期利益  

2012-03-04 11:57:46|  分类: 代码重构 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

要说明重构有哪些中长期好处是比较容易的。但许多公司受到来自投资方日益沉重的压力,不得不追求短期成绩。重构可以在短期之内带来惊喜吗? 

那些经验丰富的面向对象开发者,成功运用重构已经有超过十年的历史了。在强调代码简洁明了、复用性高的Smalltalk 文化中,许多程序员都变得成熟了。在这样的文化中,程序员会投入时间去进行重构,因为他应该这样做。如果要让主流软件开发者接受重构思想, 重构带来的利益起码有一部分必须能够在短期内体现出来。 

我们的研究团队记录了数个例子,描述重构如何和程序功能的扩展交错进行,最终同时获得短期利益和长期利益。我们的一个例子是Choices 文件系统框架。最初这个框架实现了 BSD (Berkeley Software Distribution) Unix 文件系统格式。后来它又被扩展支持UNIX System V, MS-DOS、永续性(persistent )和分布式(distributed)文件系统。框架开发者采用的办法是:先把实现BSD Linux 的部分原样复制一份过来,然后修改它,使它支持System V。系统最终可以有效运作,但充斥大量重复的代码。加入新代码后,框架开发者重构了这些代码,建立abstract superclass 容纳两个Unix 文件系统的共通行为。相同的变量和函数被移到superclass 中。当两个对应函数几乎相同、但不完全相同时,他们就在subclass 中定义新函数来包容两者不同之处,然后在原先函数里头把这些代码换成对新函数的调用。这样一来,两个subclass 的代码就逐渐变得愈来愈相似了。一旦两个函数变得完全相同,就可以将它们搬移到共同的superclass 去。 

这些重构手法为开发者提供了多方面好处,既有短期利益,也有长期利益。短期来看,如果在测试阶段发现共同的代码有错误,只需在一个地方修改就行了。代码总量变少了。特定于某一文件系统的行为与两种文件系统的共同行为清晰地分开了,这使得追踪、修补特定于某种文件系统的行为更加容易。中期来看,重构得到的抽象层对于定义后续文件系统常常很有帮助。当然,现有的两种文件系统的共通行为未必就完全适用于第三种文件格式,但现有的共享基础是一个很有价值的起点。后继的重构动作可以澄清究竟哪些东西真正是所有文件系统共有的。框架开发团队发现:随着时间流逝,增加新文件系统的支持愈来愈省劲。就算新的格式更复杂、开发团队经验更浅,情况也一样。 

拿我们都非常熟悉的一件事来做个比喻吧:我们的身体健康状况。 从很多角度来说,重构就好像运动、吃适当的食物。许多人都知道:我们应该多锻炼身体,应该注意均衡饮食。有些人的生活文化中非常鼓励这些习惯,有些人没有这些好习惯也可以混过一段时间,甚至看不出有什么影响。我们可以找各种借口, 但如果一直忽视这些好习惯,那么我们只是在欺骗自己。 

有些人之运动和均衡饮食,动机着眼于短期利益(例如精力更充沛、身体更灵活、 自尊心增强……等等)。几乎所有人都知道这些短期利益非常真实。许多人都时断时续做过一些努力,另一些人则是不见棺材不掉泪,不到关键时刻不会有足够动力去做点什么事。没错,做事应该谨慎。在着手干一件事之前,应该先向专家咨询一下。在开始运动和均衡饮食之前,应该先问问自己的保健医生。在开始重构之前,应该先查找相关资源。对重构有丰富经验的人可以 向你提供更到位的帮助。

我见过的一些人正是健康与重构的典范。我羡慕他们旺盛的精力和超人的工作性能。反面典型则是明显的粗心大意爱忘事,他们的未来和他们开发的软件产品的未来,恐怕都不会很光明。重构可以带来短期利益,让软件更易修改、更易维护。重构只是一种手段,不是目的。它是程序员或程序开发团队如何开发并维护自己的软件这一更宽广场景的一部分。

  评论这张
 
阅读(620)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018