《重构2》第八章-搬移

简介: 《重构2》第八章-搬移

1.搬移函数/搬移字段

搬移函数:在代码执行中,已封装的函数,频繁调用上下文的元素,而对自身的类的函数很少关联,可以考虑搬移函数到相关的类中,减少模块依赖;
当然一个函数变得越加通用及频繁使用的时候,就可以将其搬移至更合适的类中.

搬移字段:将字段搬移至其它地方,便于代码理解和数据结构纯净.

2.搬移语句到函数/搬移语句到调用者

搬移语句到函数:其实是代码的黄金守则之一,"消除重复".
当有相同带代码逻辑是在韩式调用前后总要知执行的,就可以搬移相关语句到函数中.

搬移语句到调用者,当我们发现一个函数使用时,有了使条件的差异性,我们有两个选择
1.搬移有差异的语句到调用者位置
2.创建一个新的函数,将其中有差异性语句拆除即可(这会造成相关函数的重复常见,命名不规范时,会让后续的协作者很头疼)

3.以函数调用取代内联代码

与用函数调用代替扁平化逻辑,理解一致

4.移动语句

将相关的逻辑的代码移动到相同的位置,便于代码理解!
但是,切记,移动语句钱,确认上下逻辑关系,移动语句使用有造成副作用,避免代码错误
同时移动语句之后,可以使用提炼函数,简化代码

5.拆分循环

很简单的理解,尽量拆分循环中的操作,让一个循环只做一件事(数据计算),或者少数的事情,这样会便于后期修改和理解,因为,你知道每一个循环是为了做什么,而不是一大堆计算换入同一个循环中,你该懂的知识其中一个计算,却要理解所有计算,你的操作会不会影响到其他操作!
重构提醒:不要担心拆分循环会造成效率低下,我们有更多的方法可以提升效率

6.以管道代替循环

在操作系统和代码进步的时代,各种管道符可以让代码的可读性更强.
示例:
在函数中筛选出所有的印度的办公室,并返回办公室所在城市信息和联系电话
原代码

function acquireData(input) {
    const lines = input.splice("\n");
    let firstLine = true;
    const result = [];
    for (const line of lines) {
        if (firstLine) {
            firstLine = false;
            continue;
        }
        if (line.trim() === "") continue;
        const record = line.splice(",");
        if (record[1].trim() === "India") {
            result.push({city: record[0].trim(), phone: record[2].trim()})
        }
    }
    return result;
}

管道符优化后

function acquireData(input) {
  const lines = input.splice("\n");
  return lines.slice(1)
    .filter(line => line.trim() !== "")
    .map(line => line.splice(","))
    .filter(fields => fields[1].trim() === "India")
    .map(fields => ({city: fields[0].trim(), phone: fields[2].trim()}));
}

7.移出死代码

死代码从运行上来讲,不会影响代码运行速率,但是在代码理解中,就会产生很多不必要的工作量!之前没有版本管理,大家可能觉得,某一段代码以后可能还会用到,所以不能删除,只是将其注释,但是,现在的版本管理代码工具,几乎都拥有版本溯源功能.
在此基础上,我们可以将死代码专门拉一个分支做一个版本,进行分操作记录.以后需要找回这份代码,拉出版本重新拷贝即可.

目录
相关文章
|
设计模式 算法 Java
设计模式第十五讲:重构 - 改善既有代码的设计(下)
设计模式第十五讲:重构 - 改善既有代码的设计
278 0
|
4月前
|
存储 算法 Serverless
|
4月前
|
开发者
编程问题之逻辑编程有什么缺点
编程问题之逻辑编程有什么缺点
《重构2》第九章-重组数据
《重构2》第九章-重组数据
97 0
|
设计模式 JSON 缓存
如何“好好利用多态”写出又臭又长又难以维护的代码?| Feeds 流重构方案
如何“好好利用多态”写出又臭又长又难以维护的代码?| Feeds 流重构方案
82 0
|
SQL 缓存 安全
如何避免写重复代码:善用抽象和组合
通过抽象和组合,我们可以编写出更加简洁、易于理解和稳定的代码;类似于金字塔的建筑过程,我们总是可以在一层抽象之上再叠加一层,从而达到自己的目标。但是在日常的开发工作中,我们如何进行实践呢?本文将以笔者在Akka项目中的一段社区贡献作为引子分享笔者的一点心得。
160 0
如何避免写重复代码:善用抽象和组合
数据结构上机实践第二周项目2- 程序的多文件组织
数据结构上机实践第二周项目2- 程序的多文件组织
105 0
数据结构上机实践第二周项目2- 程序的多文件组织
|
存储 算法 C++
STL设计之链表设计,分块分组件分析,迭代器设计思路
STL设计之链表设计,分块分组件分析,迭代器设计思路
STL设计之链表设计,分块分组件分析,迭代器设计思路
|
存储 关系型数据库 MySQL
第十三章《优化》
第十三章《优化》
第十三章《优化》
|
存储 数据采集 算法
深究索引:Mysql索引模型及其不同结构优劣势
深究索引:Mysql索引模型及其不同结构优劣势
154 0
深究索引:Mysql索引模型及其不同结构优劣势