《重构2》第十一章-重构API

简介: 《重构2》第十一章-重构API

api是程序前端和后端联动的节点,无序或看似有效的api,会给后来的开发者以及协作人员带来不必要的麻烦!相信有一部分人是认为POST方法万岁,输出的api全是POST请求,且格式统一,在某种意义上,会被认为,只有一种请求,对接起来更为方便。其实并不然,api后续逻辑的增删改查数据,统一放到post请求中,时间一长,你讲不理解每个api淂作用,有人说,我进行语义化api不就可以了,迄今为止,我也依然认为,在开发过程中,给函数起名是个大难题,且占用了我大部分时间!
同时,全是post的请求,但凡api中注释写的不清晰,后续的协同人员将会浪费更多的时间去寻找你的api,甚至,急燥的程序员会自己重新写一个api,而且,这个api跟你之前写的几乎一致。
有些人是为了快速开发,但是,当你的代码出现问题,而其他人找不到你的代码时,你的加班,将更为浪费时间!
以上,是我同意重构api的原因!

1将查询函数和修改函数分离

任何有返回值的函数,都不应该看得到副作用!

将无论怎么查询,返回值都是一样的结果存储在某个缓存中,这样可以为后续的查询大大减少时间;
如果是一个既有返回值又有副作用的函数,可以试着将查询从修改中分离出来,变成可复用的查询;

2.函数参数化

其实本质就是提取类似逻辑的函数,并将其中不同的取值作为参数提取出来,当然,这个修改涉及的函数,需要在修改之后均测试一边,避免考虑不周引起的变量缺失。这个方法使用的时候,建议小步修改,不用一次提取大量函数,导致业务逻辑增多而增加测试难度!

3.移除标记类型

一些标记类型的函数取值,让人不得不去扒拉代码,尤其是,你的函数参数中有一个布尔值时,你讲不知道这个true/false是想执行什么逻辑,那么此时,我们就可以将其需要执行的函数拆分为两个函数,并在函数调用时,将拆分函数作为参数写入源函数中,这样,你就明确的知道,这个值时做什么的!

4.保持对象完整

对于这个优化,我的认识是,为了让代码看起来更加简单,便于理解,从而做出的优化,优化方案有两种,一是将整个对象作为参数,传入函数中;二是进行做我引用,即将几个需要用到的字段赋值到this中,方便当前类的所有函数进行调用。

5.以查询取代参数

此优化方案,有利有弊。
利为:简化了调用方的操作,调用方用了更少的操作、更少的参数完成了功能;
弊为:可能会给函数造成不必要的依赖关系,增加开发者维护成本,此弊端,其实可以用小颗粒度的功能函数来弥补,同时查询函数的结果要具备确定性,即:无论什么时候,我传入固定的值,返回值是相同的。

6.以参数取代查询

与上述方法为反向操作;
作用就是,解除函数依赖,传入参数更加清晰,将责任转移至调用方,迫使,调用方传入的数据必须是合法的,这是降低代码耦合度的代价。好处还有一个,不必担心类中有其他函数会修改你的参数值,因为在此函数中,你的使用时独一无二的,无可动摇的。

7.移除设置函数

这个方法简单的十分理解,就是给你的类创建一个参数,在每次new一个新的对象时,传入该参数,用于动态修改;

8.以工厂函数取代构造函数

简而言之,此方法就是,创建一个工厂函数,用于操作new类动作,用来简化逻辑理解。

9.以命令取代函数

此方法用于拆分复杂的函数逻辑,主要是为了修改对象属性/结果,因此,可以对命令函数以参数传入的方式进行重构,同时,尽可能将所有的局部变量修改为字段,这样便于提炼函数和数据逻辑处理;

10.以函数取代命令

与上述方法为反向操作;
主要是为了优化简单的函数,如果一个函数逻辑可能不超过10行代码或者没有什么可复用性,那么没必要单独写一个类,或者拆分的极细小,过度的追求函数简短,有时会让读写成本增加。

目录
相关文章
|
8月前
|
API
api一键自动合约跟单模式 | 程序化交易系统开发讲解【附样板源码实例分析】
“量化交易”有着两层含义:一是从狭义上来讲,是指量化交易的内容,将交易条件转变成为程序,自动下单;二是从广义上来讲,是指系统交易方法,就是一个整合的交易系统。
|
2天前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
|
8月前
|
存储 SQL Web App开发
迭代技术方案设计文档规范
规范在团队管理中的意义无需多言,对于开发团队来说,技术方案的设计和执行无疑是日常工作中很重要的一块。编码一定要在思考清楚之后在开始,以免把问题带入线上,或者反复修改造时间、精力的浪费。
340 0
|
9月前
|
Java 编译器 应用服务中间件
代码开发优化细节
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。
188 2
代码开发优化细节
|
9月前
|
缓存 算法 安全
这才叫 API 接口设计!
一家公司的每个系统都会有各种各样的接口,但是大部分公司,特别是传统行业的公司的所谓接口文档更多是当每个系传统的 word 文本格式,这种传统的格式有着人尽皆知的痛点: 1. 维护不及时; 2. 与代码不同步; 3. 归档后“便束之高阁”; 4. 接口文档跟代码没有互动; 5. 文本检索无法建立全局搜索,需要额外借助工具。 为了解决上述的问题,需要建立一套行之有效的接口管理体系,该体系的目标是: 1. 能够进行接口文档管理,作为后续的接口治理的其中一部分; 2. 能作为接口测试的平台,这样能保证接口跟代码是同步的; 3. 支持文本检索。
|
11月前
|
程序员 测试技术
《重构2》第十章-简化条件逻辑
《重构2》第十章-简化条件逻辑
306 0
|
11月前
|
数据处理
《重构2》第六章-重构基础
《重构2》第六章-重构基础
281 0
|
11月前
|
算法
《重构2》第七章-封装
《重构2》第七章-封装
76 0
|
算法 网络协议 API
彻底明白如何设计一个良好的 API
现在软件开发流程都是协同合作的,前后端分离,那么我们如何实现对 API 的统一认知?又该如何设计一个良好的 API 接口?随着业务的演进,如何设计一个有兼容性的API?面对多种客户端,如何设计一个处处适用的 API 呢? RESTful 是目前最流行的 API 设计规范,通过一定的规范可以解决上面这些问题,对于 RESTful 架构的理解可以参考阮一峰老师的这篇文章(http://www.ruanyifeng.com/blog/2011/09/restful.html),简单一句话就是对服务器端资源进行操作,实现"表现层状态转化"。URI(统一资源定位符)代表一种资源,它可以是一段文本、一张图
uiu
|
测试技术 API 数据处理
如何设计出更好的 API ?
如何设计出更好的 API ?
uiu
108 0