日期:2014-05-20  浏览次数:20620 次

系统重构是个什么玩意儿
如题,系统重构是一个什么玩意儿呢?大家可能有很多的不同看法:
1. 系统重构是那些系统架构师、技术大牛玩的高端玩意儿,跟咱普通屌丝不懂,跟咱没啥关系。
2. 系统重构就是改代码,大改特改那种,整个重来一遍,这个比较邪恶,比较容易改出事儿,还是不要轻易尝试。
3. 我知道系统重构,也知道它能改善遗留系统,但我还是不敢轻易尝试,因为改出问题来怎么办,还是算了吧。

然而我认为,现在我们对系统重构有太多的误解,以至于我们还不怎么了解它,就已经将它拒之门外。什么是系统重构呢?我认为,不同的人、不同的角色在看待这个问题时,答案是不一样 。

作为普通程序员,纯屌丝,重构不是一个阳春白雪的高级玩意儿,它是一种习惯,一种良好的编程习惯。这种习惯让我们迅速由菜鸟转变为大牛,可以编写出高质量、优秀的程序。怎么这样说呢?举几个例子吧。

假如你在实现某个功能的时候,发现与之前已经写好的某个功能相似或者相近,你应该怎么办呢?相信你下意识的动作是ctrl+C,然后是ctrl+V。复制一段代码是简单的,但你知道吗,这样做将给系统带来多大的隐患。它将使系统日后的维护变得困难,因为这段代码如果被复制了数遍,一旦日后需要变更,所有被复制的代码都必须要变更。散落一地的被复制代码将会使我们的系统日后越来越难于维护,而你千万不要成为造成这一切的恶人。

然而,实现代码复用并不容易,最关键是,原有的代码并不能立即为你的新程序所利用,因为它们往往是与其它代码耦合在一起。情况往往是这样,你发现既有的某段代码你可以利用,但这段代码是在某个类、某个函数中的一个部分,而这个类或函数的其它部分不是你需要的。这时候,如果你是一个优秀的编程人员,你应当运用重构中“两顶帽子”的设计模式设计:先不要添加新功能,而是重构原有代码,以适应新需求,然后在此基础上添加新功能。

具体怎么做呢?你可以有两个选择,抽取工具类与抽取父类:

抽取工具类。第一步,运用重构中的“抽取方法”,将你需要的代码抽取到另一个工具类中,形成一个公用方法,让原程序变为对该方法的引用;第二步,在你的新功能中引用该方法。
抽取父类。首先还是运用重构中的“抽取方法”,将你需要的代码抽取出来,放到一个新函数中,放在原有的类中。然后对该类抽取出父类来,将这个需要公用的新函数升级至父类中,这样“两顶帽子”的第一步完成;将你的新类设计成这个父类的子类,实现你需要的新功能。

再假如,你现在拿到一个新需求,是在原有功能的基础上实现的功能扩展,你应当怎样做呢?下意识地,你拿着原有代码就开始改了,是不是?把原有代码用if语句框起来,然后将这些代码copy到if语句的另一端,然后开始改。我们常常骂别人代码写得烂,其实自己也是烂代码的作者。如果你是一个优秀的程序猿,你应当怎样做呢?运用重构方法,重构原有的代码,使其具有可扩展点,然后再按照OCP原则添加新的功能。不知道具体怎么做?没关系,饭要一口一口吃,路要一步一步走,至少我们开始明白,写出好的代码不容易,需要我们去学习,而系统重构就是实现这一目标的捷径。(续)

相关文章:
遗留系统:IT攻城狮永远的痛
需求变更是罪恶之源吗?
系统重构是个什么玩意儿

------解决方案--------------------
如果只给一天你改个BUG , 你还有时间重构?