`
victorpan
  • 浏览: 25562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

重构 – 改善既有代码的设计

阅读更多

又是一本E文书,花了比中文书3倍的时间去看它,不过怎么说多看E文有好处,对于国内的人的翻译也不放心,当年的《设计模式》中文版让我看得吐血,后来还是买了E文原版,两本书对照着看。虽然慢点,但是买E文书还是有好处地,特别是这样的经典图书。

在看它之前,对于重构也略知一二,包括基本的原则和实现的方式,但是一直没有系统而全面的看重构的意义和实现方法,它更像是一本重构的普及教材,同时又是作者的经验总结,在大家没有重视的时候,他能够跳出来强调重构的意义和实现,真是难得。

首先说一下看这本书的前提,个人感觉是需要有三个条件:

1.
熟悉Java或者其他面向对象的程序设计语言,如果没有,那么这本书到第五章来说就已经结束了。
2. 熟悉设计模式,最好看过GOF。不熟悉设计模式,对于很多例子还是不会理解的。
3. 要有面向对象设计和开发经验,对于没有经验的人来说,这本书是没有意义的。

其实这本书帮我解决最大的问题是认识了重构的真正意义,就是“自上而下的设计”。之前一直的困惑就是需求的变更,所以总是费尽心机去寻找能够适应所有变化的一种设计,这种之上而下的设计方式,是非常脆弱的,在实际开发中会遇到很多问题。期望需求不发生变更,所有的设计都能够被落实,这种事情只有在教科书里面才会有,现实的商业环境是绝对不现实的。所以既然不能指望需求不变更,那就让你随便变,然后我随便做,做好以后在做设计,特别喜欢这句话:
“The first time you do something, you just do it. The second time you do something similar, you wince at the duplication, but you do the duplication thing anyway. The third time you do something, you refactor.” – by Don Roberts.
明确了意义就要知道它的目的是什么?“To restructure software by applying a series of refactoring without changing its observable behavior. ” 两层意思:1.让软件更加容易的理解和变更。2. 不改变软件本身的功能,即不加功能也不减功能。

什么时候是最好的重构时机?
1. 当添加要功能的时候。
2. 当你修理一个bug的时候。
3. Code Review的时候。

重构的基本操作对象:
1. 方法本身,分拆,合并,变量,参数调整等。2. 对象间内容的移动,类的分拆,方法,变量的移动,委托等方法。3. 组织数据:数据结构的调整也是重构中的重要部分。4. 条件表达式和方法的调用。5. 利用面向对象的特点,泛化的使用。这些都是小地方的调整。中间还有一一章是关于大的重构方式,感觉还是要根据实际情况和自己的经验来。另外一个感觉就是,其实很多作者提到的方法,其实在JAVA的变化中已经用更好的方式实现了(作者写的时候JAVA1.2,现在已经是1.6了)比如说,assert的方式,在1.4的时候就已经在JAVA中内建了这个功能。

总体来说这本书是非常经典的一本书,唤醒了大家对重构的重视,但是重构是一个很大的课题,理解他的意义是远远不够的,关键还是在于知道在什么时候用什么方法来进行重构,这个需要开发人员有这个能力去做,管理人员肯花时间让这么做。其实最大的压力也就是在管理这方面,做新功能看得见,重构看不见。开发人员的能力是另外一个问题,其实很多的问题是可以在开发过程中避免的,重构能够让开发人员学到很多的东西,这个相辅相成循环,可以是良性的,而反之则可能是恶性的一个循环。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics