当前位置:网站首页>应用层软件开发教父教你如何重构,资深程序员必备专业技能
应用层软件开发教父教你如何重构,资深程序员必备专业技能
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
边栏推荐
- Basic usage of Vue codemirror: search function, code folding function, get editor value and verify in time
- Detect certificate expiration script
- 轻量型 GPU 应用首选 京东智联云推出 NVIDIA vGPU 实例
- What are the highlights of Huawei mate 40 series with HMS?
- 行为型模式之备忘录模式
- File download manager realized by electron
- How about small and medium-sized enterprises choose shared office?
- EOS founder BM: what's the difference between UE, UBI and URI?
- 【涂鸦物联网足迹】物联网基础介绍篇
- C language I blog assignment 03
猜你喜欢
2020-08-24:什么是小文件?很多小文件会有什么问题?很多小文件怎么解决?(大数据)
Zero basis to build a web search engine of its own
ES6 learning notes (3): teach you to use js object-oriented thinking to realize the function of adding, deleting, modifying and checking tab column
意派Epub360丨你想要的H5模板都在这里,电子书、大转盘、红包雨、问卷调查……
Introduction to the development of small game cloud
STM32F030F4P6兼容灵动微MM32F031F4P6
移动端像素适配方案
To Lianyun analysis: why is IPFs / filecoin mining so difficult?
Cloudquery v1.2.0 release
Markdown tricks
随机推荐
es创建新的索引库并拷贝旧的索引库 实践亲测有效!
EOS founder BM: what's the difference between UE, UBI and URI?
How to start the hidden preferences in coda 2 on the terminal?
An article taught you to use HTML5 SVG tags
[forward] how to view UserData in Lua
How does cglib implement multiple agents?
Zero basis to build a web search engine of its own
Elasticsearch database | elasticsearch-7.5.0 application construction
Summary of common SQL statements
DC-1 target
递归、回溯算法常用数学基础公式
Basic usage of Vue codemirror: search function, code folding function, get editor value and verify in time
An article will introduce you to HTML tables and their main attributes
How to make characters move
window系统 本机查找端口号占用方法
The role of theme music in games
Common syntax corresponding table of mongodb and SQL
What grammar is it? ]
What is the meaning of sector sealing of filecoin mining machine since the main network of filecoin was put online
Those who have worked in China for six years and a million annual salary want to share these four points with you