大话重构之系统重构
来源:互联网 发布:java 在线解压zip文件 编辑:程序博客网 时间:2024/04/28 09:40
系 统 重 构
一:什么是系统重构?
重构(名词):就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
重构(动词):使用一系列重构准则(手法),在不改变"软件之可察行为"前提下,调整其结构。
两种定义都强调是在不改变"软件的外部行为"前提下,不改变"软件之可察行为"就是说让修改不影响外部使用程序(程序员),在个外部来看,程序的行为和结果没有任何的变化.重构只是对程序内部结构进行调整,让代码更加容易理解,然后更容易维护。
二:重构的作用:
通过重构可以达到以下的目标:
·持续偏纠和改进软件设计
重构和设计是相辅相成的,它和设计彼此互补。有了重构,你仍然必须做预先的设计,但是不必是最优的设计,只需要一个合理的解决方案就够了,如果没有重构、程序设计会逐渐腐败变质,愈来愈像断线的风筝,脱缰的野马无法控制。重构其实就是整理代码,让所有带着发散倾向的代码回归本位。
·使代码更易为人所理解
Martin Flower在《重构》中有一句经典的话:"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员。"对此,笔者感触很深,有些程序员总是能够快速编写出可运行的代码,但代码中晦涩的命名使人晕眩得需要紧握坐椅扶手,试想一个新兵到来接手这样的代码他会不会想当逃兵呢?
软件的生命周期往往需要多批程序员来维护,我们往往忽略了这些后来人。为了使代码容易被他人理解,需要在实现软件功能时做许多额外的事件,如清晰的排版布局,简明扼要的注释,其中命名也是一个重要的方面。一个很好的办法就是采用暗喻命名,即以对象实现的功能的依据,用形象化或拟人化的手法进行命名,一个很好的态度就是将每个代码元素像新生儿一样命名,也许笔者有点命名偏执狂的倾向,如能荣此雅号,将深以此为幸。
对于那些让人充满迷茫感甚至误导性的命名,需要果决地、大刀阔斧地整容,永远不要手下留情!
·帮助发现隐藏的代码缺陷
孔子说过:温故而知新。重构代码时逼迫你加深理解原先所写的代码。笔者常有写下程序后,却发生对自己的程序逻辑不甚理解的情景,曾为此惊悚过,后来发现这种症状居然是许多程序员常患的"感冒"。当你也发生这样的情形时,通过重构代码可以加深对原设计的理解,发现其中的问题和隐患,构建出更好的代码。
·从长远来看,有助于提高编程效率
当你发现解决一个问题变得异常复杂时,往往不是问题本身造成的,而是你用错了方法,拙劣的设计往往导致臃肿的编码。
改善设计、提高可读性、减少缺陷都是为了稳住阵脚。良好的设计是成功的一半,停下来通过重构改进设计,或许会在当前减缓速度,但它带来的后发优势却是不可低估的。
三:重构的步骤:
第一步:从分解大函数开始
将那些业务逻辑特别复杂,程序代码特别多,提起就让人头疼的超级方法,它容易让我们的软件退化,所以首先就要对其分解
第二步:拆分大对象
大对象就是指那些包含数十个甚至上百个方法或者函数,功能无所不包的超级对象,这样的对象中各种各样的功能被耦合在一起,稍有修改就会影响到许多功能,甚至让那些不相干的功能产生BUG,所以,我们需要合理的拆分大对象。
第三步:提高代码复用率
当我们在编写程序时,会遇到许许多多的功能相似甚至相同的模块,所以我们面对如何处理这些相同或相近的代码处理,作为一名优秀的程序员,此时都会遵守这样的设计原则“不要重复自己原则(DRY)”。
第四步:发现程序可扩展点
在重构的同时,我们要考虑系统扩展的问题,即提高系统的易变更性。在系统中有效的识别和发现扩展点,并加以合理的设计,则可以是系统能够轻松自如的应对日后的变更。
第五步:降低程序依赖度
要降低程序之间的依赖度,从而更加方便的为其他功能所用,使系统代码复用率有效提高,接口、实现与工厂模式;外部接口与适配器模式;继承的泛滥与桥接模式等
第六步:分层
合理的分层结构就是:什么层级的需求变更就去修改什么层级的代码,与其他层无关,一般会分为,MVC层(表示层)、BUS层(业务逻辑层)、DAO层(数据访问层)。
- 大话重构之系统重构
- 大话重构连载2:什么是系统重构
- 大话重构
- 《大话重构》
- 《大话重构》
- 大话重构
- 《大话重构》
- 读大话重构
- 大话重构 记录
- 读书笔记--《大话重构》
- 读大话重构
- 代码重构--大话重构
- 大话重构连载首页
- 大话重构——改善代码
- 系统设计之代码重构
- 机房收费系统重构之设计
- 新版 SegmentFault 重构之系统架构
- 系统架构重构
- 非常可乐
- ios RunLoop 用法
- SQLite 语法大全
- 数据库中的范式问题
- DP问题各种模型的状态转移方程
- 大话重构之系统重构
- app后端如何保证通讯安全--url签名
- Qt中的元对象系统
- 不要随便设置随机种子
- app后端怎么设计用户登录方案
- xshell传输文件—rz,sz命令
- 编译器链接过程 静态链接 动态链接
- HDOJ 1495 非常可乐 (BFS隐式图)
- JavaScript描述数据结构与算法——队列