驱动程序的重构过程的详细介绍
对一个驱动程序的重构过程(节选)
作者:雷立辉 (个人主页:http://www.coeffort.com)
Bad Smell 小解:
1.重复程序代码(Duplicated Code)
重复程序代码是程序中最容易出现的臭味。在一个大的工程中,你可以发现同一个操作可能有多种实现
方式,比茴香的“茴”字的写法还要多。只要你在两个以上的地方发现相同的程序代码块你就需要重构
了。其中最简单的是在一个类的两个方法有相同的代码块。你可以使用“提取法(Extract Method)”
提出一个共有的方法,然后让两个地方调用这个函数。其它的如相同的复杂条件表达式,类之间使用的
相同的代码等等都应该提取出共有的方法,共有的类让调用者使用同一份代码。有一个大的原则便是某
一功能的代码实现有且只有一次。否则,这些重复代码不仅会加大可执行程序的大小更重要的是造成阅
读以及修改bug 的困难。
2.长方法(Long Method)
Martin 说,生命最长且最有用的是那些短方法。长方法会造成更多的长方法的生成,因为那些蕴含在
长方法中的功能块没有提取出来,而添加的代码只好又去拷拷再改改然后被添加到新的方法中,这又造
成了重复程序代码。短的方法有利于阅读,它的方法名字本身就是功能的描述,它使用的临时变量不会
太多,也有利于阅读和除错,更利于重用。消除长方法的一个诀窍便是看代码中的注释。那些被分段描
述的代码块可能便是一个小的方法。
3.大类(Large Class)
当一个类做的事太多时,它就会有非常多的成员变量(instance variables),这些成员变量反过来又
造成了许多重复代码。大类的特点便是责任太多,就像是一个臃肿的机构一样,交流和管理起来便就分
外困难一些。同时,这种大类也像长方法一样,会造成新的大类产生。(如果你想想一个工厂的工人都
负责从产品生产,包装,销售,甚至管理厂务,那还有没有效率?那对工人的要求要有多高?所以,流
水线和分工产生了,它让一个工人只做某一个阶段的工作或者最擅长的工作)
4.长参数列(Long Parameter List)
其弊端在于难以理解,难于使用,难以扩展。如果您对Windows 下的CreateProcess 和Unix 下的fork
做过比较的话,如果您有Windows API 调用恐惧症的话,这不难理解前面两点。
5.分歧的改变(Divergent Change)
现象是如果改变一项需求,就必须改变几个方法。举例来说,输出可能有多种不同的格式(如纯文字文
件、HTML 文件或者数据库等),而设计时只针对其中一种设计,但预期可能会有其它种可能性,因此
程序必须预留可能性,或者在增加新功能时使用重构使之具有这种弹性。
6.霰弹式的外科手术(Shotgun Surgery)
比喻非常形象。如果消除一个bug,您要多处小改动。不过,如果您忘了一处,那就看其他人的脸色吧。
重构介绍:
重构是在不改变可观察行为的前提下,对软件内部结构的改变,目的是使它更易于理解并且能够更廉价地
进行改变。那么重构究竟有什么好处呢?据Martin 讲,有四大好处ii:
1.重构改进软件的设计
如果没有重构,程序的结构将会随着新的需求的添加而失去原来的清晰性;由于维护人对原有系统的
片面理解或者只是为了实现短期目标将会造成程序结构失衡,重复代码等等。而且代码加得越多,结
构就会腐蚀得越快,从而使结构更加不易理解。这种恶性循环的结果便是软件不可维护。糟糕的设计
通常都是以重复的代码为特征的。而重构的目标便是让程序恢复一段代码只在整个程序中只出现一次,
从而出现一个清晰的结构。
2.重构让程序变得更易理解
重构支持更小的类、更短的方法、更少的局部变量、更小的系统耦合。重构要求你更加小心自己的命
名机制,让名字反映出你的意图。如果哪一块代码太复杂以至于影响到理解,那就是重构开始的时刻。
3.重构帮助你发现bug
当你发现许多bug 是因为重复代码引起的或是当你重构时发现有些代码是如此的不负常规或者你通过
重构理解了代码,那你就理解了这一句话。
4.重构让你编程效率更高
当你通过重构恢复了程序的高质量、设计、结构、可读性,理解了程序结构之后。使用你构造的可重
用方法,添加新的功能真是变得很容易了。
Martin 还说,重构在添加功能前,修改bug 中及做代码走读(Code Review)时做最好。
本文地址:http://www.45fan.com/dnjc/67079.html