首页 » Web前端 » php重构既有代码技巧_代码身上的坏味道不是重构的七宗罪

php重构既有代码技巧_代码身上的坏味道不是重构的七宗罪

访客 2024-11-13 0

扫一扫用手机浏览

文章目录 [+]

(!(~+[])+{})[--[~+""][+[]][~+[]] + ~~!+[]]+({}+[])[[~!+[]]~+[]]

上面是一段 Javascript 代码稠浊,大概的转换过程是这样的:

看完觉得都不好意思说自己是前端了......

php重构既有代码技巧_代码身上的坏味道不是重构的七宗罪

再来看一段Hello World代码:

php重构既有代码技巧_代码身上的坏味道不是重构的七宗罪
(图片来自网络侵删)

> vv ,,,,,"Hello"< >48, vv,,,,,,"World!"< >25,@

这门变态措辞叫Befunge,由Chris Pressey在1993年创造,本意为设计一种难堪编译器的措辞……结果立时涌现了一批编译器。

Befunge的代码是二维的。
常日认为Befunge是第一个基于“二维掌握流”的措辞,后来衍生出的一大批类似的措辞都是受的Befunge影响。

但这还称不上个性之最,由David Morgan-Mar 发明的Ook!措辞,仅用单词“Ook!
”,“Ook.” 和“Ook?”来实现程序。
我们来看一个Hello World的一个示例:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.

Ook.Ook? Ook!为什么像两个穴居人在对话?

这些“个性”代码跟我们现在常用的C,Python,go,PHP,Java等等比,切实其实便是天书,能看懂已经属实不易,更别谈掩护这些代码了。

而要去重构这些“个性”代码,就像吃了苍蝇一样难熬痛苦。
很多人抱怨重构、乃至抗拒重构,说“重构出defect来了”,“项目紧,最近不要再重构了”,“重构到什么时候停呀”......

实在,重构经由了二十几年的发展和运用,已经成为程序员最爱的实践之一了,帮助很多程序员们去追求精良的代码和设计。

只是大家对重构的认识还有所偏颇,以下是重构的“七宗罪”,希望大家能更新对重构的认识:

执着于手腕,疏于心法

《重构:改进既有代码的设计》是Martin和Kent对他们多年以来整理代码的实践的总结,然这背后表示的是他们对软件技能的深层次思考和履历。
很多新人执着于学习重构手腕而疏于学习背后的心法,有些可惜。

Robert C Martin的《代码整洁之道》和《敏捷软件开拓:原则、模式与实践》、《设计模式》等都是帮助大家修炼心法的不错选择,他们可以让你更深层的理解代码,更高层面临待系统,磨炼你的嗅觉,提升你的代码能力。

没有方法,暴力重构

“非常的培植须要非常的毁坏。
”很多人都认同这一不雅观点。
但对遗留的运用软件、构筑过半的项目却容不得推倒重来。
很多新人在开始重构时仅凭自己对代码的理解就进行剪切、复制、删除、添加等大刀阔斧修正的人不在少数,尤其还没有完备节制重构手腕的新人们。
结果当然缺点百出,导致测试“奖赏”一片红。
修复这些缺点代码少则几个小时,多则几天,这不是重构,这是重写。

那怎么破呢?只能苦练。

在《重构:改进既有代码的设计》一书中Martin明确提出了68个代码级别的重构手腕,这些手腕都是等价的。
在重构的过程中纵然错了也没紧要,都可以安全回退,重新开始。

个中比较常用的手腕便是桥接,如当我们要删除一个方法的时候,会新添加一个方法,然后将它的引用逐一的迁移过去,直到旧方法成为孤岛,就可以将它删除了。
它能担保重构前与重构后的程序代码功能完备同等,从而实现安全重构。

不懂重构,为了重构而重构

重构须要能够办理一定的问题,要有一个目标的引领,否则铆足劲做了半天也不知道自己做了啥,末了不得不全部回滚,空费工夫。

重构是对软件内部代码及其构造的调度,期望改进代码质量,匆匆使程序设计架构更趋合理。
说白了,重构办理的便是代码和代码构造的问题,它开始自坏味道,其目标便是要肃清坏味道,肃清那些“不合我意”的成分,让代码的意图更清晰。

Martin在《重构:改进既有代码的设计》一书中提到了22个常见的代码坏味道,都可以作为我们重构的目标,来指引我们的重构。
如:

肃清同一类两个方法之间的重复代码肃清某一类中的长方法重命名删除A类中的去世代码简化繁芜的条件语句

同时,重构的范围也应是那段坏味道的代码,在重构过程中对其,也仅对其进行修正。

不知道什么时候完成

重构是整理代码保持轻装前行的主要手段,然而我们也须要能够明确知道重构要做什么,终极的产出如何验证。

如果肃清繁芜条件语句是重构的目标,那么简化22行-32行繁芜的条件语句便是一个更详细的重构目标。
有了这样一个详细清晰的目标,“重构什么时候停”也便是一个很随意马虎回答的问题了,不用担心项目经理每天问你啥时候落成了。

重构金字塔

重构实在不仅有代码级别的重构,还包括模块级别的重构、架构级别的重构。
不同级别的繁芜度不同,肃清的坏味道不同,须要的韶光也不同。

没有操持,追求完美主义

重构过程中,常常涌现为了肃清一个坏味道,改了A类的方法,又改了B类的变量,不得不改了C类;末了创造这三者之间还有依赖,导致进行不下去了,波及面越来越广,韶光越来越长,项目经理在催,末了不得不放弃所有的代码。

调度一个正在运行中的系统也如治国,不要期望一次性调度到俊秀的代码或架构,而是要遵照“小步提高”的方法。
从问题动手,每次重构一小步。
针对一个问题有目的修正,修正完后测试,测试通过后提交代码,再进入下一轮重构。
如果在改动过程中创造了其他须要修正的地方,不要顺便重构,你可以把它记下来,作为下一轮重构的内容。

这种做法在代码和模块层面都是相比拟较随意马虎实践,而针对架构层次的调度就相比拟较繁芜。
这也是很多架构师须要去思考的问题,如何渐进式重构。
不搞一下子半年一年的重构,而因此周以月为单位,快速的迭代,能够很快的验证结果得到收益。

不知道结果对不对

对付大略的代码级别重构如果做得好是可以不用验证结果的,然对付模块级别或架构级别的重构,是须要的。
在重构架构失落败的例子中,很多是由于越做加倍现很难验证结果的精确性,越做越不知道改的对不对,末了创造很难回答老板和客户的问题不得不失落败。

这个时候一个可以衡量重构的指标就表示它的代价:能时候考验我们的成果,确认我们的重构还在办理当初的问题。
目前常见的量化指标有如下四类,可供参考。

数量:代码的行数质量:代码繁芜度、重复读、缩进等级、架构依赖繁芜度等韶光:花费的天数本钱:投资回报率

不理解高下文,不与团队沟通

我们不得不承认对代码的重构是有风险的,尤其是模块或架构级别。
这段代码的业务是什么,为什么当时这么设计,测试覆盖率是多少,如果这样改会不会影响到其他模块?对其他角色有什么影响?这些问题都要逐一回答。
在风险相对较大的改动更要如此,须要和团队成员,各个角色,包括项目经理和客户进行沟通,评论辩论这次重构的好处和风险,得到足够的评估,从而能够做出得当的重构决策,将风险降到最低。

重构和做其他事情一样,要有目标有方法有策略有结果。
最主要的是要提升技能能力,学习安全重构手腕,小步提高,渐进式的重构,不断验证重构的收益,才能欢迎一个一个的重构任务,真正的成为清理代码的高手。

本日

重构:改进既有代码的设计(第2版)(平装版)

作者: [美]马丁•福勒(Martin Fowler)

译者: 熊节 ,林从羽

重构 改进既有代码的设计 第2版 平装版

作者:[美]马丁·福勒(Martin Fowler)

当当

重构 改进既有代码的设计(第2版 平装版)(异步图书出品)

作者:[美]马丁·福勒(Martin,Fowler)

京东

内容简介:

本书清晰揭示了重构的过程,阐明了重构的事理和最佳实践办法,并给出了何时以及何地该当开始挖掘代码以求改进。
书中给出了60多个可行的重构,每个重构都先容了一种经由验证的代码变换手腕的动机和技能。
本书提出的重构准则将帮助你一次一小步地修正你的代码,从而减少了开拓过程中的风险。

部分内容来源于网络,如有侵权,立即删除。

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读0 评论0