经过前面的一番讲解,相信你已经对系统重构有了一些初步的认识了。一切的一切仿佛在告诉我们,系统重构总是与需求变更无关。但此时,我不得不告诉你这是真实的谎言。
我们的软件系统总是处于一种变化之中,并且往往是一种由浅入深、由易到难的过程。但是,当系统复杂程度发生变化时,我们应当及时调整我们的设计,来适应新的变化。然而我们没有做到这一点,所以我们的系统维护变得越来越困难。要解决我们的问题必须通过系统重构去优化我们的程序,使之重新适应业务需求。毫无疑问,需求变更才是我们去重构的主要动因。
然而,系统重构要求我们不能改变软件的外部行为,这意味着在重构的过程中不能为软件添加任何新功能,重构仿佛与变更无关。这就有些让人搞不懂了,我们因为变更才尝试重构,但重构却不让我们去变更!破解这个真实的谎言的关键就是,系统重构并不是禁止我们变更,而是应当以“两顶帽子”的方式进行变更。
什么是“两顶帽子”呢?就是当我们需要变更系统时,应该将变更的过程分为两个步骤:首先是不添加任何功能先重构我们的系统,使之适应新的需求;然后开始变更,实现新的需求。第一步正是我们所说的重构,它既要保证原有功能的正确无误,又要使系统结构能够适应新的需求。为了达到这个目标,我们让重构必须在不改变软件外部行为的前提下进行,调整的仅仅是其内部结构,外部功能保持不变。当软件的内部结构可以适应新的需求时,我们才开始添加新的功能,顺理成章地实现新的需求。
你可能会问,为什么要搞那么复杂呢?让我们先剖析一番以往我们是怎么添加新功能的。当用户来了一个新需求时,我们修改代码的首要原则,是对新需求的修改不能影响以往的功能。我们过去如何做到这一点的呢?其实我们没有什么好的办法,一个直观的想法就是,原有代码改得越少,改动量越小,修改出错的风险就会最小。正因为如此,即使原程序已经不适应新的需求,但程序员也不愿去修改程序的结构,而是就着现有代码不断地往里添加程序。随着时间的流逝,添加的程序越来越多、越来越乱,因而系统维护成本越来越高。
采用系统重构完全就不是这样一个概念了。这里当原程序不适应新的需求时,我们采用的策略是一种“糟糕设计零容忍度”的策略,即先重构系统使之首先适应新的需求,再顺利成章去实现这些需求。由于“不改变软件外部行为”,我们可以很容易地建立测试机制,在测试机制的不断监督下,有质量地保证重构的成功。然后我们再实现新功能时,可以保证易于实现,并且使得可读性、可维护性和易变更性得以保障。这样的过程避免了那些因变更而带来的糟糕设计,从而避免软件质量的下滑。所以,理解“两顶帽子”、习惯“两顶帽子”,对于学习和使用系统重构,显得尤为重要。
大话重构连载首页:
http://fangang.iteye.com/blog/2081995
特别说明:希望网友们在转载本文时,应当注明作者或出处,以示对作者的尊重,谢谢!
分享到:
相关推荐
Android之大话设计模式——:抽象工厂模式借鉴.pdf
大话Oracle RAC:集群、高可用性、备份与恢复(带目录清晰中文完整版)
大话Oracle RAC:集群、高可用性、备份与恢复。 此书被认为不可多得的好资料之一:大话Oracle RAC(PDF经典),看完之后深有感触,发出来共享一下。
Android之大话设计模式——:抽象工厂模式参考.pdf
Oracle RAC是Oracle数据库的一种高级集群技术,它允许多个服务器节点共享同一个物理数据库,从而提供极高的系统可用性和性能。在RAC环境下,数据库服务可以在集群中的任何节点上运行,当某个节点出现故障时,服务...
初中语文文摘历史“大话王”郭台铭:被夏普狠狠摔了个大跟
《大话移动APP测试》是一本...总的来说,《大话移动APP测试》这本书为读者提供了一个全面的移动应用测试框架,无论是对于初学者还是经验丰富的测试工程师,都能从中获取宝贵的指导和实践经验,提升测试效率和应用质量。
《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨的态度和丰富的想象力,揭示了存储系统的底层奥秘,旨在帮助读者全面...
第2部分是实践篇,每一章都针对RAC的一个知识点展开讲解,包括Oracle Clusterware的维护、HA与LB、备份、恢复、Flashback家族、RAC和Data Guard的结合使用、RAC和Stream的结合使用,最后对ASM进行深入介绍,并给出...
大话存储2:存储系统架构与底层原理极限剖析》内容简介:网络存储是一个涉及计算机硬件以及网络协议/技术、操作系统以及专业软件等各方面综合知识的领域。目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对...
仪表板可以将不同视图组合在一个交互式的面板上,用户可以通过筛选器、动作链接等交互元素探索数据。而故事则允许用户按照特定顺序展示视图,帮助观众逐步理解分析过程和发现的见解。 标签“BI(Business ...
大话存储:存储系统底层架构原理极限剖析(终极版)第4部分 大话存储:存储系统底层架构原理极限剖析(终极版)第4部分
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
大话Java:从零基础到数据库、Web开发以漫画的形式,由浅入深、循序渐进地介绍Java编程的常用技术和方法,内容涵盖了Java基本语法结构、面向对象特征、集合框架体系、异常处理、GUI编程、MySQL数据库、JDBC数据库...
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
这种文件格式通常包含了一个资源索引,用于快速定位内部的各个资源。解包器通过解析这个索引,找到每个资源在文件中的位置,然后将其解码为原始数据。这个过程涉及到对二进制数据的读取、解析和转换,需要对数据结构...
总的来说,"大话西游鼠标指针"是一个集娱乐性和实用性于一体的个性化定制工具,它允许用户通过简单的操作改变鼠标的外观,从而提升电脑使用的乐趣。在享受电影文化的同时,也展示了IT技术如何与艺术、娱乐相结合,...
大话移动APP测试 Android与iOS应用测试指南
本文为资深网络编辑鲜橙与其他几位朋友录制的一段关于移动开发之QT-Quick开发的音频,在情人节来临之际我们特地奉献给大家,希望大家喜欢,也希望大家支持鲜橙! 《大话IT》节目介绍:《大话IT》是由各IT媒体中一群...