精华内容
下载资源
问答
  • 是否已经读过前面两篇关于烂代码和好代码的文章?这些让人抓狂的烂代码,你碰到几种?什么才是好代码、高质量代码?工作中,总会不可避免的接触到烂代码,就像之前说的,几乎...1.1.重构的悖论很多人把重构当做一种...
    展开全文
  • 代码大概如下图,这个是直接用于controller层的方法。整整200多行。仔细阅读了一遍代码,然后进行了梳理,知道了大体流程,最后进行了重构重构代码如下:经过重构后,代码仅仅只有40几行。一屏显示完整...

    你遇到最长的代码是多长?就我这几年工作经验,平时我们大多数都是在增删改查。遇到的类和方法大多功能单一,都不太长。

    之前接触的其中一个项目。熟悉代码的时候,遇到一个常用方法,当场懵逼。这么长???。代码大概如下图,这个是直接用于controller层的方法。整整200多行。

    db3ad982408b2dd4c1c5999937e35789.png

    仔细阅读了一遍代码,然后进行了梳理,知道了大体流程,最后进行了重构。

    重构后代码如下:

    4c17d435e287ac7425b0c4e8f93f1618.png

    经过重构后,代码仅仅只有40几行。一屏显示完整。而且可以快速理解代码逻辑。后续修改就不用再去梳理一大片逻辑了。

    实际上做的也很简单,大概步骤如下:

    1、 参数简化:参数太长不美观,一堆参数不利于观看和理解。

    105263ff6df67e5b383151b70eca873c.png

    2、 临时变量优化:魔法值提取、命名规范。

    c5f489e7de757505a17b817d860f2bc2.png

    3、 提取方法:不管是可以共用,还是有独立逻辑的,都应该提取出来,这个方法提取出来后一共有这么几个方法。方法的命名也应该小心,应该是我们看到方法名称就知道方法的作用。

    67daefa9295115c7ce37d28dee51d42e.png

    抽取方法的过程就是把大逻辑拆成一个个独立的小逻辑的过程。抽离完成那么整个方法的逻辑也就基本梳理完成了。

    总结:

    仅仅十分钟左右的代码优化,就使代码逻辑一目了然,不管后面是谁来看这个代码,也能快速的理解,这就间接提升了我们工作效率。

    不过这个类还是很长。5000多行的代码。这个项目是一个APP的后端项目。我不知道当初是出于什么原因,基本上这个App需要的业务接口都在这个类里面。并且存在很多的长方法。这些问题都是不应该出现的。类的功能应该使他职责单一。代码重构这条路还很长啊!

    代码重构主要注意的几点:

    1、参数控制:参数的数量控制,尽量不超过3个。命名也要注意,达到见名知意。

    2、方法抽离:逻辑比较独立或可共用的都应该提出出来。提取出来有几个注意的地方。

    a、是方法名称要体现方法的作用。

    b、是方法放的位置,有些是当前类,有些是父类,有些是一些其他实体。比如一个方法利用到的所以参数都是同一个类的参数,那么这个方法就该存在这个类里面,而不是调用的那个类。

    3、修改了注意及时自测!!!

    代码重构实际上是一个大项目,有很多注意的地方,同时也有很多重构技巧。后面写一个详细一点的整理。

    Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!

    fe4073ac0a9fda83ddf98270f361001c.png
    展开全文
  • 一年前,在公司大佬指点之下,我开始写系统级重构工具 Coca (https://github.com/phodal/coca) 。哦,不,不对,是刚开始学习 Golang,因为我第一次提交是从一个 Go hello,world写起。commit a685d69080a7...

    一年前,在公司大佬的指点之下,我开始写系统级重构工具 Coca (https://github.com/phodal/coca) 。哦,不,不对,是刚开始学习 Golang,因为我的第一次提交是从一个 Go 的 hello, world 写起的。

    commit a685d69080a7abde684e1d0707cbf410092e3173

    Author: Phodal HUANG <h@phodal.com>

    Date: Tue Oct 22 23:01:19 2019 +0800

    first commit

    commit c6b5a0c7f174c6a0ba233a1356aca5c370ba4315

    Author: Phodal HUANG <h@phodal.com>

    Date: Tue Oct 22 23:06:04 2019 +0800

    learn: add hello world

    时过境迁,这个小工具已经不小了 —— 即使是这个项目的作者,我也要看我写的 README,才会想起来有这么一些功能。这一年来,根据我的一些工作上的需要,陆陆续续地也添加了一些颇为有意思的特性。这些小特性除了不限制编程语言:

    501ef794d8ac524514a56718411f8646.png

    还可用于指导重构:

    3d39ab23d62733f034d7fe6c401dd3c7.png

    还可以用于写 PPT 的时候讲述故事:

    • 高频修改文件查找

    • 包结构分析(不限于 Java,大部分的语言是以目录划分包结构的)

    • Todo 分析(可结合历史)

    当然了,如果你的系统是 Java 语言主导的话,那么 Coca 能提供更强有力的支撑,具体见:https://github.com/phodal/coca

    只是呢,不管我们使用的是什么工具,我们方法论都是类似的。也因此《系统重构与迁移指南》(https://migration.ink/) 成为了系统重构不可多选的材料,Google 『系统重构』 和 『重构工具』会有惊喜。

    8df1188003d29eedf8404d02eb76cc7f.png

    7c89e5ffee3f599b633270b26e37c9dd.png

    系统的必然之路:系统重构 or 重写

    没啥说的,部分的系统都是要被重构或者重写的。那么另外一部分呢?他们被淘汰了——要么是产品,要么是公司,笑~。

    系统变成了一个大泥球,需求已经越来越难以实现:

    fe1018dd36dc6d1473a19782cc09b364.png

    真相就是这么简单。如果系统不被指南,和进行频繁的代码级重构的话,那么系统被取代的速度就更快了。

    重构 vs 重写

    关于系统级别的重构,我们先要讨论的第一个问题其实蛮简单的:我到底是要重构还是重写?选择哪个主要取决于:你要的是技术挑战,还是业务挑战?

    哦,不,不对,它取决于你要的是 KPI 是技术 KPI,还是非技术 KPI?说白了,就是价值决定了一切。

    对于重构而言,我们所要面对的是技术挑战;对于重写而言,我们所面对的是业务挑战。

    重构的技术挑战

    我们所面临的主要技术挑战是:

    1. 是否能确保过程的安全性?如何设计测试防护网
    2. 是否能想到更好的设计来取代现有的方案?
    3. 如何做一次有效的分析与评估?
    4. 如何渐进式的重构系统?如何保持小的、快速的提交
    5. 怎样支持未来业务的可扩展?即,支撑业务可扩展性
    6. 是否寻找最合适的重构技巧?比如通过 IDEA 的重构
    7. 如何让重构技能被传承?即,多数团队成员都能快速上手
    8. ……

    重写的业务挑战

    与重构不同的事,重写时的挑战主要是来自于梳理现有业务:

    1. 如何体系化的整理现有的业务?

    2. 如何剔除已淘汰的业务?

    3. 如何确保主干业务的完整性?

    4. 是否能确保细小的业务功能不被遗失?

    5. 能否设计出更完善的业务知识管理体系?

    系统重构的未来

    在 Coca 编写完成之后,我发布了《系统重构与迁移指南》一份短小、精悍的重构手册。从这个手册快速的自然增长率(GitHub star 指标,没有经过大量宣传),并且已经在 Google 的相关关键字下(如系统重构、重构策略等)排名第一,我发现了人们缺少一份这样的指南和工具。

    所以,在未来一定会有更多的相关工具诞生,并配套有大量的实践指南。

    方法论支撑

    在开始重构之前,我们需要设计出可行的重构方案,这也就是方法论的支撑。

    对于重构的方法论来说,实现上我们已经可以在市面上找到大量的相关书籍,只需要结合起来看就可以了:

    • 《重构与模式》

    • 《设计模式:可复用面向对象软件的基础》

    • 《重构:改善既有代码的设计》

    • 《领域驱动设计:软件核心复杂性应对之道》

    • 《修改代码的艺术:构建易维护代码的 9 条最佳实践》

    • 《代码整洁之道》

    • 《架构整洁之道》

    • 《数据库重构》

    • 《遗留系统重构指南》

    • 《前端架构:从入门到微前端》

    工具支撑

    市面上,已经充斥着大量代码级重构的工具,如 JetBrians 系列的 IDE。但是,对于系统级重构来说,基本上很少有工具可以直接能支撑现有的系统,哪怕是 Coca 也是有限的支持。主要原因就是:大部分的内部系统都绑定了组织中的模式。特别是对于大型组织来说,它们往往配套开发了自己的底层架构和 API。

    也因此,对于系统级别的重构来说,我们要优先考虑的是定制一个工具,又或者是基于开源工具进行扩展。

    操作指南支撑

    同样的,我们也很难在市面上找到这样的指南,因为对于大部分的公司和团队来说,重写是更好的 KPI,而重构并不会带来如此丰富的价值。除此呢,对于有过重构经验的团队来说,他们也不一定会共享出自己的经验——受能力和保密协议影响。

    其它

    软件开发总成本 = 开发成本 + 维护成本;软件维护成本 = 理解成本 + 修改成本 + 测试成本 + 部署成本。—— Ken Beck

    展开全文
  • 如果我们谈论Web应用程序,就会想到Spring,PlayStruts等框架,这些框架可以帮助我们构建具有可扩展性和可管理性软件。通过它们,你基本不需要写太多的代码就可以构建一个应用。但事实上编写代码并不难,编写高...

    在今天的时代,每个人都在努力提升自己的能力。如果我们谈论Web应用程序,就会想到Spring,Play和Struts等框架,这些框架可以帮助我们构建具有可扩展性和可管理性的软件。通过它们,你基本不需要写太多的代码就可以构建一个应用。

    但事实上编写代码并不难,编写高质量的代码却很难。

    作为开发人员,一定都想达到客户期望的那样,编写出没有出现任何Bug的代码,但这基本不可能。如何判断一段代码是否高质量,一个好的经验法则是是否:这段代码可以让任何人可以像读短语一样读它

    本文我们将盘点5本能够帮助你编写出高质量代码的好书:

    1、《重构》

    d601025660d3b916dd6cead93cfdc80a.png
    • 豆瓣评分9.3,销量百万
    • 世界级软件开发大师Martin的不朽经典
    • 涵盖70多个可行的重构

    本书解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善,涵盖了70多个可行的重构,自出版以来一直深受读者喜爱,好评如潮

    时隔20年,《重构》出版了第二版,相对第一版,第二版的整体结构并没有太大改动,但每一章的内容基本都进行重写,最主要的是代码示例不再是Java,而是选择JavaScript。

    2、《代码大全(第二版)》

    dd21d968d1bc7a8eb270ab6f59d31eef.png
    • 数十万读者的选择
    • 有关概念适用于大多数常见的编程语言
    • 将近500个代码示例

    本书从软件质量和编程思想等方面论述了软件构造问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。

    本书的第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容,现在看依然不会过时,丰富的程序示例在今天也依然适用。

    3、《代码阅读》

    4bce311dd1f4607960be7b3fec5118d3.png

    本书是2004年美国Jolt大奖入围作品。本书的作者Diomidis Spinellis使用了超过600个来自现实世界中的例子来向我们展示如何鉴别好的(或坏的)代码:如何去阅读它,从中去找寻什么,以及如何利用这种技巧来提升我们自身编写的代码的品质。

    4、《Code Quality》

    35d0f9d99c682c922f9a1794a9bfa560.png

    美亚评分4.0,Diomidis Spinellis的第一本书《Code Reading》向程序员展示了如何理解和修改软件的关键功能特性。Code Quality专注于非功能属性,Spinellis利用数百个开源项目中作为示例 - 例如BSD Unix系统和HSQLDB Java数据库等,来说明每个软件开发人员都能够理解的概念,和能够立即应用的技术。

    5、《代码整洁之道》

    bfd08554d1365f34d2c610f7c49b706d.png
    • 豆瓣评分9.0
    • 阐述了整洁代码的敏捷实践的方法
    • 书中介绍规则均来自Martin多年的经验,拥有很高的借鉴价值

    本书被程序员风味编写出干净代码的圣经,Bob叔通过本书给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。

    6、《编写可读代码的艺术》

    d4508917d7cd26602b6774441a61c145.png

    本书关注编码的细节,总结了很多提高代码可读性的小技巧,本书旨在强调代码对人的友好性和可读性。主要涵盖以下内容:

    • 简化命名、注释和格式的方法,使每行代码都言简意赅。
    • 梳理程序中的循环、逻辑和变量来减小复杂度并理清思路。
    • 在函数级别解决问题,例如重新组织代码块,使其一次只做一件事。
    • ......

    7、《代码之美》

    af639a6b6baca0aa2a1e307fd56e5378.png

    每个人对代码之美都有自己的认识,有38位作者,每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,从而让读者可以学习顶级程序员的思维方式和代码方式。

    展开全文
  • 白交 发自 凹非寺量子位 报道 | 公众号 QbitAI编程如何节省更多时间,犯更少错误?最近,这样一份「心得」火了。这位名叫Kesk Noren软件工程师在Medium上分享了一篇博文——「40 Tips that will change your ...
  • 代码重构方法

    2017-06-29 11:27:41
    因为之前面试遇到了一个问题,就是列举你遇到的代码重构的方法和经验,我当时就蒙逼了,wtf,什么是代码重构我都不知道,感觉自己真的是渣1战力,连词都不懂,也不知道应该要如何下手,所以感觉当时就很无力,我觉得...
  • 区块链app开发,印象最明显地方就是,区块链由于币种非常多,不同币种数据结构处理方法又不完全一样,而每个币种界面又几乎是一样。 所以我习惯性地在各种控制器中,用大量if else去判断币种类型,然后...
  • 我们在浏览一个系统代码后,通过经验及直觉就能发现的一些“坏味”,例如:代码的方法过大。系统中重复的代码过多。类的子类中存在大量相同方法。代码中过多的注释。参数列表太长。那么一般我们应该选择怎样的时机去...
  • 这本书虽然主要是讲重构,但是对于经验程序员来说,编写程序规范技巧更值得借鉴。 代码的坏味道,对应是好编程习惯。本文中方法(Java)=函数(python),通用技巧总结如下。 1. 处理重复代码 从重复代码...
  • 然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》。” “一口气读完了这《重构:改善既有代码的设计》,感觉书中作者对代码的整理不像是一种技术,更像是一...
  • 这《重构:改善既有代码的设计》之于重构就相当于韵谱之于作诗。一个翻着韵书作诗诗人一定是蹩脚...然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》。”
  • 然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》。”  “一口气读完了这《重构:改善既有代码的设计》,感觉书中作者对代码的整理不像是一种技术,更像...
  • 这《重构:改善既有代码的设计》之于重构就相当于韵谱之于作诗。一个翻着韵书作诗诗人一定是蹩脚,但好...然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》
  • 这《重构:改善既有代码的设计》之于重构就相当于韵谱之于作诗。一个翻着韵书作诗诗人一定是蹩脚,但...然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》。
  • 有关重构项目一些小经验

    千次阅读 2018-08-31 16:32:45
    最重要一点:新启一套接口和方法重构,同时保证两套系统可用性。 1.定义前端协议参数时候,名称,参数类型一定要统一,并列成一个表格放在公司wiki上。 (1)类似我们原有代码,对于定义定向id,有叫...
  • 这样的方法造成初级人员基本不敢动代码,组长干废2个。项目开发完全失控。本人,经过经过对代码进行进行重构发现,重构对现有的代码是有极强的优化能力。对于杂乱无章的代码,对于业务功能堆叠的冗长方法。经过一些...
  • 代码度量提取方法模式进行目的明确的重构在我上中学时候,有一位英语教师说:“写作就是重写别人已经 重写过东西。” 直到大学,我才真正理解了他这句话意思。而且,当我自觉地采用这个实践时候,就开始...
  • 特别是,我对他在咨询工作中使用静态分析和代码指标非常感兴趣。 我本人还是一个相对年轻顾问,所以我认为听取他对这些主题以及软件行业咨询意见非常有价值。 所以我写信给他,他很乐意回答一些问题。 ...
  • “这《重构:改善既有代码的设计》之于重构就相当于韵谱之于作诗。一个翻着韵书作诗诗人一定是蹩脚...然而,在达到这一境界之前,需要不断实践和经验积累,并且要先读读Fowler这《重构:改善既有代码的设计》。”
  • 代码大概如下图,这个是直接用于controller层的方法。整整200多行。仔细阅读了一遍代码,然后进行了梳理,知道了大体流程,最后进行了重构重构代码如下:经过重构后,代码仅仅只有40几行。一屏显示完整...
  • 为了促进软件重构,已经提出了许多用于代码气味检测/或用于自动或半自动重构的工具。 但是,这些工具是被动的并且是人为驱动的,因此使得软件重构取决于开发人员的自发性。 结果,在软件重构方面经验很少的软件...
  • 重构笔记

    2013-08-19 13:44:45
     觉遇到好总结,方法和心得还是有必要记录下来,好记心不如烂笔头。什么是重构——对软件内部结构调整,在不改变软件可观察行为前提下提高可理解性,降低修改成本。什么时候应该重构——代码的”坏味道...
  • 我们从小就学习写作文,基于学习写作文的经验,我总结了码代码能力提升学习思路步骤如下: 思路:长期阅读别人源码,长期维护重构自己源码,最终做到码代码能力质提升。 步骤: 1)先把基础语法学...
  • Unity3dLog系统重构

    2019-06-27 16:21:24
    由于要重写Unity3dLog系统,变更为自定义方式,按照Log4j显示内容方法 Unity3dLog 一般在Unity3d中编写日志入下代码 Debug.Log("hello message"); 在UnityEditorUnityEngine当中除了打印message以外...
  • 总计花了大概两周,每天上下班各有半小时左右时间,读完了《重构——改善既有代码的设计(第二版)》,获益良多,虽然从开始学习编程起就一直很注意代码的可读性和代码结构维护,但是毕竟经验尚浅,无论是广度还是...
  • 从系统代码看出系统架构不是一件容易做到事,然而在识别出重要架构元素之后,在浏览整个系统,了解系统结构属性以及规划增加修改和重构活动就会变得更加容易。这是因为一旦提取出系统架构特征,我们...
  • 最近重构项目组件,看到项目中存在一些命名和方法分块方面存在一些问题,结合平时经验和 Apple官方代码规范 在此整理出 iOS 工程规范。提出第一个版本,如果后期觉得有不完善地方,继续提出来不断完善,文档在此...
  • 本书作为CSS重构指南,不仅展示了如何编写结构合理CSS,以构建响应式、易于使用网站,还介绍了如何用重构方法创建可读性更强更易于维护CSS 代码。 目标读者 虽然我希望所有CSS 开发人员都能从中受益,但...
  • 最近重构项目组件,看到项目中存在一些命名和方法分块方面存在一些问题,结合平时经验和 Apple官方代码规范 在此整理出 iOS 工程规范。提出第一个版本,如果后期觉得有不完善地方,继续提出来不断完善,文档在此...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 269
精华内容 107
关键字:

代码重构的方法和经验