手机版

代码清洁度(重构)

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

前言

之前也介绍过,我们团队的前端项目从无到有8个月经历了10万行业务代码迭代(只有产品长期规划需求的20%),目前还在迭代过程中。

除了设计一个好的架构来管理这个高度复杂的前端应用程序,团队成员还开始补充设计模式和重构的知识。目的是在不断迭代的过程中优化项目代码,使代码保持新鲜、健壮和可维护.以便后来加入的新团队成员能够快速加入我们的产品开发。

不管PS:的语言如何,重构都是软件开发不可或缺的一部分。如果你已经知道重构的基础,你可以直接跳到文章后面的重构案例部分。

重建背景

如果尿布发臭,就换掉。

随着业务需求的增加,代码随着时间的推移变得越来越糟糕。这可能包括以下不良嗜好(仅列表):重复代码太长。函数遵循一个原则:每当你觉得需要解释什么的时候,可以尝试把需要解释的东西写成函数。当子类没有做足够的工作,或者在可见的预期之内,就不会有新的情况。考虑内联该类。过长的类容易产生冗余代码。例如,如果一个类中出现多个具有相同前缀或后缀的变量,这意味着您可以考虑将它们细化为某个组件,或者考虑该组件是否可以成为子类,并通过细化该类来重构它。什么是重构

让我们回顾一下“什么是重构”

在不改变软件可观察行为的前提下,改进其内部结构以提高理解,降低修改成本取自《重构 - 改善既有代码的设计》(以下简称《重构》)

什么时候重构?

我们需要明确的是,重构并不是一件应该专门搁置一段时间的事情。重构不是目的,但重构可以帮助你把事情做好。

只有三件事,三次重建

重复性的工作,当现有代码不能帮助你轻松添加新功能和修复bug时,检查逻辑困难。代码审查可以让其他人审查代码,以检查它是否可读。可理解性太强的代码没有注释,甚至自己都无法快速理清代码逻辑重构的度量指标。

数量:行代码质量:代码复杂度、耦合性、可读性、架构依赖复杂度等成本:花费的时间返回(成就):支持后续功能的快速叠加,解决了现有因代码设计问题无法优化的矛盾等。关注关键点

说了这么多废话,其实大家都知道,不结合实际的理论都是空洞的。

但是重构和设计模式一样,也需要一个‘学习——,理解——,突破’的过程。第一步的学习让你了解基本的重建技术,第二步的练习唤起你对重建技术的回忆并重温其应用,第三步的应用和实践经验激发你的思考、理解和总结,让你灵活运用。但是,所有的人总是在不断的学习和复习,从而达到特定的场景和特定的应用,并且灵活自由。

重建是一个很大的话题,《重构》的作者经历了N多个项目,经过多年的经验总结出了重建的技巧。

重建技能

《重构》作者总结的重构技术太多了,只能通过图片展示所有作者总结的重构列表。具体补品可以看《重构》这本书。

重建实践

作者推荐的做法:

随机选择一个目标。先给自己选择一个目标(比如“去掉一堆不必要的子类”),然后朝着目标前进。如果你不确定,停止每一步。当你无法证明你所做的事情能够保证原程序的逻辑和语义时,请停下来想一想:现有的重构是改进了还是没有结果需要撤销?为了保证重构后的每一个测试都能正常运行,作为开发人员,在开发和重构的同时,重构应该被视为开发的一部分。在快速堆叠代码,实现基本所需功能的基础上,编写测试用例,保证功能不变,逐步重构。这就是为什么我们的团队要求每个人都掌握重构的基本技能。好的程序员应该尽量避免低质量的代码。

重构一个案例

故事场景

顾客可以租三种类型的电影

租赁规则

价格计算规则:

普通片——起步价2,每天2天以上,1.3元新片——每天,3元儿童片——起步价2,每天3天以上,每部电影收费0.8元。

积分计算规则:

每部借来的电影加1,每部新电影加2

原始代码

CODEPEN

程序结果:(请确保重建后结果不变~)

类图

如果感兴趣,可以先看一下原始代码,考虑一下原始对象关系,再考虑如何重构代码。其实原代码中有很多问题是可以挖掘的。以下是我们的讨论:

划分责任,遵循单一责任原则,报表打印账单功能承担多项功能,包括费用计算、积分计算、结果显示等。1: 6.1提取方法3354最常用的重构方法解决方案2: 9.1分解条件用户类承担不属于它的责任,包括收费规则和积分规则。这些职责应该属于电影类型。理清业务逻辑,比如收费规则、积分规则——看故事场景,不要直接访问对象的数据。其他对象很容易改变这个对象的数据,但是拥有这个数据的对象什么都不知道。解决方案:8.10封装字段(Encapsulate Field technology)——使得数据和行为想要被分离和重构,并且不应该被外界感知,确保测试用例对于部分重构仍然是可行的

在这里,为了更好地展示重构技术,根据上面的讨论,使用TS进行部分重构。重构的方式其实是根据业务未来的扩展方向来决定的,没有最优解。感兴趣的可以加入我们,抛出你的看法~

CODEPEN执行结果:

重构的类图关系

基本技能

采取小步骤,经常测试(确保有足够的测试来支持你的重构动作),使用智能开发工具(比如VSCode右键单击来反汇编和功能化过多的函数代码)来推荐书籍

《代码整洁之道》 《重构 - 改善既有代码的设计》 《修改代码的艺术》 《代码大全》

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:代码清洁度(重构)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。