当前位置:网站首页>应用层软件开发教父教你如何重构,资深程序员必备专业技能
应用层软件开发教父教你如何重构,资深程序员必备专业技能
2020-11-06 22:16:00 【Java架构师联盟】
前言
先来看一个小故事
从前,有位咨询顾问造访客户调研其开发项目。系统核心是继承体系,顾问看了开发人员所写的一些代码。他发现整个体系相当凌乱,上层超类对于系统的运作做了一些假设,下层子类实现这些假设。但是这些假设并不适合所有子类,导致覆写(override)工作非常繁重。只要在超类做点修改,就可以减少许多覆写工作。在另一些地方,超类的某些意图并未被良好理解,因此其中某些行为在子类内重复出现。还有一些地方,好几个子类做相同的事情,其实可以把它们搬到继承体系的上层去做。
这位顾问于是建议项目经理看看这些代码,把它们整理一下,但是经理并不热衷于此,毕竟程序看上去还可以运行,而且项目面临很大的进度压力。于是经理说,晚些时候再抽时间做这些整理工作。
顾问也把他的想法告诉了在这个继承体系上工作的程序员,告诉他们可能发生的事情。程序员都很敏锐,马上就看出问题的严重性。他们知道这并不全是他们的错,有时候的确需要借助外力才能发现问题。程序员立刻用了一两天的时间整理好这个继承体系,并删掉了其中一半代码,功能毫发无损。他们对此十分满意,而且发现在继承体系中加入新的类或使用系统中的其他类都更快、更容易了。
项目经理并不高兴。进度排得很紧,有许多工作要做。系统必须在几个月之后发布,而这些程序员却白白耗费了两天时间,干的工作与要交付的多数功能毫无关系。原先的代码运行起来还算正常,他们的新设计看来有点过于追求完美。项目要交付给客户的,是可以有效运行的代码,不是用以取悦学究的完美东西。顾问接下来又建议应该在系统的其他核心部分进行这样的整理工作,这会使整个项目停顿一至二个星期。所有这些工作只是为了让代码看起来更漂亮,并不能给系统添加任何新功能。
你对这个故事有什么感想?你认为这个顾问的建议(更进一步整理程序)是对的吗?你会遵循那句古老的工程谚语吗:“如果它还可以运行,就不要动它。”
为此,作者创作了这本书籍---《重构》,这里也分享给大家
适应人员
本书的目标读者是专业程序员,也就是那些以编写软件为生的人。书中的示例和讨论,涉及大量需要详细阅读和理解的代码。这些例子都以Java写成。之所以选择Java,因为它是一种应用范围愈来愈广的语言,而且任何具备C语言背景的人都可以轻易理解它。Java是一种面向对象语言,而面向对象机制对于重构有很大帮助。
尽管关注对象是代码,但重构对于系统设计也有巨大影响。资深设计师和架构师也很有必要了解重构原理,并在自己的项目中运用重构技术。最好是由老资格、经验丰富的开发人员来引入重构技术,因为这样的人最能够透彻理解重构背后的原理,并根据情况加以调整,使之适用于特定工作领域。如果你使用的不是Java,这一点尤其重要,因为你必须把我给出的范例以其他语言改写。
下面我要告诉你,如何能够在不通读全书的情况下充分用好它。
如果你想知道为什么应该重构,请阅读前两章。它们告诉你重构是什么以及为什么应该重构。
第1章重构,第一个案例
第2章重构原则
如果你想知道该在什么地方重构,请阅读前5章。它会告诉你一些代码特征,这些特征指出“这里需要重构”。
第3章代码的坏味道
第4章构筑测试体系
第5章重构列表
第6章重新组织函数
第7章在对象之间搬移特性
第8章重新组织数据
第9章简化条件表达式
第10章简化函数调用
第11章处理概括关系
第12章大型重构
需要这份资料的,
关注公众号:Java架构师联盟,每日更新技术好文
如果你想着手进行重构,从第5章延伸至第12章。它不能说是一份全面的列表,只是一个起步,其中包括迄今为止我在工作中整理下来的所有重构手法。我希望这是值得你日后一再回顾的部分。一开始只需概略浏览列表,看看其中有些什么,不必理解所有细节。一旦真正需要实施某个准则,再详细阅读它,从中获取帮助。列表部分是供查阅的参考性内容,你不必一次就把它全部读完。
此外你还应该读一读列表之后其他作者的“客串章节”,特别是第15章。
第13章重构,复用与现实
第14章重构工具
第15章总结
所谓重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的几率。本质上说,重构就是在代码写好之后改进它的设计。
好啦,需要这份资料的,关注公众号:Java架构师联盟,每日更新技术好文
版权声明
本文为[Java架构师联盟]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4472036/blog/4706897
边栏推荐
- With this artifact, quickly say goodbye to spam messages
- The legality of IPFs / filecoin: protecting personal privacy from disclosure
- vue3 新特性
- [elastic search engine]
- Code generator plug-in and creator preform file analysis
- Python basic variable type -- list analysis
- 迅为-iMX6ULL开发板上配置AP热点
- 谷歌浏览器实现视频播放加速功能
- ado.net and asp.net The relationship between
- Axios learning notes (2): easy to understand the use of XHR and how to package simple Axios
猜你喜欢
2020-09-04:函数调用约定了解么?
The Interpreter pattern of behavior pattern
Description of phpshe SMS plug-in
Js数组-数组的用法全在这里(数组方法的重构、数组的遍历、数组的去重,数组的判断与转换)
image operating system windows cannot be used on this platform
CloudQuery V1.2.0 版本发布
Can you do it with only six characters?
大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术
What are the highlights of Huawei mate 40 series with HMS?
Big data processing black Technology: revealing the parallel computing technology of Pb level data warehouse gaussdb (DWS)
随机推荐
Axios learning notes (2): easy to understand the use of XHR and how to package simple Axios
Small program introduction to proficient (2): understand the four important files of small program development
An article will take you to understand CSS3 fillet knowledge
The legality of IPFs / filecoin: protecting personal privacy from disclosure
超高频RFID医疗血液管理系统应用
Summary of front-end performance optimization that every front-end engineer should understand:
Unity performance optimization
2020-08-18:介绍下MR过程?
ES6 learning notes (2): teach you to play with class inheritance and class objects
With this artifact, quickly say goodbye to spam messages
How to play sortable JS vuedraggable to realize nested drag function of forms
Windows 10 蓝牙管理页面'添加蓝牙或其他设备'选项点击无响应的解决方案
细数软件工程----各阶段必不可少的那些图
Using an example to understand the underlying processing mechanism of JS function
[self taught unity2d legendary game development] map editor
MRAM高速缓存的组成
How much disk space does a file of 1 byte actually occupy
Understanding formatting principles
Visual rolling [contrast beauty]
An article will introduce you to HTML tables and their main attributes