程序员应知 也说重构
创始人
2024-07-30 19:41:18
0

重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

从Martin Fowler最早提出重构的概念开始,到现在已经有很长时间了,重构已经是深入忍心了。与其说它是一种方法,不如说是一种思想、一种习惯。我自己在工作的过程中也一直在使用它来改进自己的程序,所以在此想说说自己的两点认识。

重构不“挑食”

上面已经提到,重构不仅仅是固定的那些方法,而更是一种思想和编码时候的习惯,所以,不管你是用那种语言编程,都可以应用重构。《重构》那本书上的例子都是Java的,可能很多人会觉得,只有在Java、C#等面向对象的语言中,才能够使用重构的方法,而在面向过程和函数式的语言中,就很难应用重构了。

我认为并非如此,的确,在面向对象的语言中,有很多特定的重构方法,比方说抽取接口、变量上移、变量下移等等,但还是有一些通用的重构方法,可以在各种语言中使用。

举两个最常见的例子:重命名和抽取方法。这两个方法不论在什么语言的编程下面都是非常常用的,我们也经常会做这样的重构。比方说我在使用pl/sql编写procedure和function的时候,就经常会做这样的操作。特别是当pl/sql developer的新版本中增加了重构的选项,能够帮我们更好地自动完成重构的操作。在这里,pl/sql这门语言可是过程化的,而非面向对象的。

所以说,我们可以在编写任何代码的过程中都可以使用重构,甚至在HTML代码中、JavaScript代码中等等,都可以使用,因为重构不仅仅是具体的方法,而是一种改善代码,改善系统的一种思想,它的目的就在于让我们的系统的可读性、可维护性更高,从而具有更好的质量。

重构可以随时进行

Martin Fowler的《重构》一书还有个副标题,叫做“改善既有代码的设计”,这让我在当初产生了一点儿误会,还以为重构只能是在把代码写完了之后才能够进行的。其实不然,我们可以随时对程序进行重构,(我曾经在内部的交流中把它叫做行进中的重构,呵呵)那样会更有利于之后的编码。

比方说,在编写程序的过程中,忽然发现有一个变量的命名有些不合理,我们可以立即对其进行重构,修改名称;或者更实用的,发现自己接下来要写的代码完全是之前代码的重复,或者说可以从别处copy,然后稍作修改就可以,那么我们就可以回头把之前的方法抽取出来,而在新的位置直接调用;或者发现想要使用某个方法,但它位于其它类中,就可以想是否可以提取父类或者接口,然后把通用的方法提取到其中,然后再对其进行继承或者实现,那样就可以方便地调用方法了。

还有很多很多的方法,都是可以在编码的过程之中就可以做的,而不需要等所有的编码完成了之后才做。那样的好处是显而易见的,在之后如果再需要实现类似的功能,就可以直接调用已有的方法,而不需要等***再做调整了。

总之,越是使用,越是觉得在编程的过程中应该始终把“重构”的思想放在头脑中,随时拿出来使用。

你对于重构是否也有想说的话呢?

 

原文地址:http://blog.csdn.net/lingyun2005/archive/2010/12/08/6062149.aspx

【编辑推荐】

  1. 在PHP语言中使用JSON
  2. 快速排序(Quicksort)的Javascript实现
  3. Web移动应用 HTML5 CSS和JavaScript
  4. 高效PHP程序必知的53个技巧
  5. CSS高手也容易犯的10个错误提示

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...