大话重构之系统重构

来源:互联网 发布:java 在线解压zip文件 编辑:程序博客网 时间:2024/04/28 09:40

                                                                         系 统 重 构

一:什么是系统重构?

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

重构(动词):使用一系列重构准则(手法),在不改变"软件之可察行为"前提下,调整其结构。

两种定义都强调是在不改变"软件的外部行为"前提下,不改变"软件之可察行为"就是说让修改不影响外部使用程序(程序员),在个外部来看,程序的行为和结果没有任何的变化.重构只是对程序内部结构进行调整,让代码更加容易理解,然后更容易维护。



二:重构的作用:

通过重构可以达到以下的目标:

·持续偏纠和改进软件设计

重构和设计是相辅相成的,它和设计彼此互补。有了重构,你仍然必须做预先的设计,但是不必是最优的设计,只需要一个合理的解决方案就够了,如果没有重构、程序设计会逐渐腐败变质,愈来愈像断线的风筝,脱缰的野马无法控制。重构其实就是整理代码,让所有带着发散倾向的代码回归本位。

·使代码更易为人所理解

Martin Flower在《重构》中有一句经典的话:"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员。"对此,笔者感触很深,有些程序员总是能够快速编写出可运行的代码,但代码中晦涩的命名使人晕眩得需要紧握坐椅扶手,试想一个新兵到来接手这样的代码他会不会想当逃兵呢?

软件的生命周期往往需要多批程序员来维护,我们往往忽略了这些后来人。为了使代码容易被他人理解,需要在实现软件功能时做许多额外的事件,如清晰的排版布局,简明扼要的注释,其中命名也是一个重要的方面。一个很好的办法就是采用暗喻命名,即以对象实现的功能的依据,用形象化或拟人化的手法进行命名,一个很好的态度就是将每个代码元素像新生儿一样命名,也许笔者有点命名偏执狂的倾向,如能荣此雅号,将深以此为幸。

对于那些让人充满迷茫感甚至误导性的命名,需要果决地、大刀阔斧地整容,永远不要手下留情!

·帮助发现隐藏的代码缺陷

孔子说过:温故而知新。重构代码时逼迫你加深理解原先所写的代码。笔者常有写下程序后,却发生对自己的程序逻辑不甚理解的情景,曾为此惊悚过,后来发现这种症状居然是许多程序员常患的"感冒"。当你也发生这样的情形时,通过重构代码可以加深对原设计的理解,发现其中的问题和隐患,构建出更好的代码。

·从长远来看,有助于提高编程效率

当你发现解决一个问题变得异常复杂时,往往不是问题本身造成的,而是你用错了方法,拙劣的设计往往导致臃肿的编码。

改善设计、提高可读性、减少缺陷都是为了稳住阵脚。良好的设计是成功的一半,停下来通过重构改进设计,或许会在当前减缓速度,但它带来的后发优势却是不可低估的。


三:重构的步骤:


第一步:从分解大函数开始

         将那些业务逻辑特别复杂,程序代码特别多,提起就让人头疼的超级方法,它容易让我们的软件退化,所以首先就要对其分解


第二步:拆分大对象

         大对象就是指那些包含数十个甚至上百个方法或者函数,功能无所不包的超级对象,这样的对象中各种各样的功能被耦合在一起,稍有修改就会影响到许多功能,甚至让那些不相干的功能产生BUG,所以,我们需要合理的拆分大对象。


第三步:提高代码复用率

         当我们在编写程序时,会遇到许许多多的功能相似甚至相同的模块,所以我们面对如何处理这些相同或相近的代码处理,作为一名优秀的程序员,此时都会遵守这样的设计原则“不要重复自己原则(DRY)”。


第四步:发现程序可扩展点

         在重构的同时,我们要考虑系统扩展的问题,即提高系统的易变更性。在系统中有效的识别和发现扩展点,并加以合理的设计,则可以是系统能够轻松自如的应对日后的变更。


第五步:降低程序依赖度

          要降低程序之间的依赖度,从而更加方便的为其他功能所用,使系统代码复用率有效提高,接口、实现与工厂模式;外部接口与适配器模式;继承的泛滥与桥接模式等

第六步:分层

         合理的分层结构就是:什么层级的需求变更就去修改什么层级的代码,与其他层无关,一般会分为,MVC层(表示层)、BUS层(业务逻辑层)、DAO层(数据访问层)。




1 0