如何减少项目中的冗余代码?
如何减少项目中的冗余代码?
- 前言
- 为什么会出现冗余代码
- 如何解决
- 提取公共请求/业务逻辑
- 聚合函数的收敛
- 能合并的函数进行合并
- 善用配置表思维
- 再会
前言
随着业务的不断迭代,项目代码会变得越来越多。如果前期不注意开发规范和代码层次结构规划,到后期项目中就会出现大量的冗余代码,维护困难。到最后,多是以重构,新建项目重写收尾。
原本,可以更好的。
本周双休,今天我们就来聊一下如何减少项目中的冗余代码。
为什么会出现冗余代码
结合我的经验来看,出现冗余代码的情况包括但不限于以下几个方面:
- 对于公共请求/业务逻辑未做提取
- 能收敛为聚合函数的函数直接提供给外部调用
- 能合并的函数未合并
- 相似结构的复制粘贴
如何解决
核心思想是能合并的合并,能提取的提取。
其实都是建议,这种东西,咬牙也能坚持。
能过就过,不能过还能离咋的?
提取公共请求/业务逻辑
比如对某项数据进行订阅和取消订阅,二者只是动作上的区别,参数是一致的。
不要在每个模块下都写一份订阅和取消订阅的逻辑,提取到全局公共逻辑中
不要写两个处理函数,用动作区分即可(以mobx为例)
// subscribes 为用户订阅数据id集合// bad case
if(subscribes.includes(row.id)){store.cancel()
}else{store.add()
}// good casestore.subscribe(row.id,subscribes.includes(row.id))async function subscribe(id,flag){let url=''if(flag){// 取消订阅url='/api/subscribe/cancel'}else{//新增订阅url='/api/subscribe/add'}await axios.post(url,{id})
}
此外,还有一个更典型的场景。登录平台获取用户信息后,为方便其他模块使用,这个信息应该放在全局,而不是每次使用再去发一个请求。
聚合函数的收敛
给定这样一个场景,新建项目并指定负责人后,会同步资源(该项目)到权限系统,并为资源对应的人赋权。
// bad case
// 创建或者更新资源信息
export function addOrUpdate(){}
//赋权
export function addPermission(){}
上述这种写法存在一个弊端,直接提供给外部的话,两个方法都要调用。
事实上,这两个是一体的行为,创建或者更新资源后,紧接着就是赋权。addPermission是addOrUpdate的子函数,直接内部调用就好。这样外部只需要调用聚合后的函数addOrUpdate即可。
// good case
// 创建或者更新资源信息
export function addOrUpdate(){addPermission();
}
//赋权
function addPermission(){}
能合并的函数进行合并
这个比较好理解,就像上边提到的订阅和取消订阅,只是动作差异,完全可以合并为一个。
此外,类似的还有插入数据和更新数据,这里动作判断标准是是否有id,有的就是更新,没有就是插入。
if(params.id){service.update(params)
}else{service.add(params)
}
善用配置表思维
之所以选择复制粘贴,是因为相似结构很多,对于这种情况,配置表+循环则是更优解。
再会
情如风雪无常,
却是一动即殇。
感谢你这么好看还来阅读我的文章,
我是冷月心,下期再见。
如何减少项目中的冗余代码?相关推荐
- 网页中调用matlab,在C#的Web项目中调用Matlab代码的步骤
在C#的Web项目中调用Matlab代码的方法 为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果.前段时间已经拖延 ...
- 在项目中这样写代码的时候,请搭配红花油、跌打损伤酒一起使用
前言 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码让我不禁感叹,代码规范这条道路还是任重而道远- 那么今天就来给大家总结一波Java中的代码小技巧,熟练掌握 ...
- 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片...
在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就 ...
- 如何使用IntelliJ IDEA的Favorites来管理项目中的常用代码
1.如何添加favorites 项目目录树中对想要添加的文件单击右键,选择add to favorites: 确定你想要放入的 favorites list 即可. 2.如何重命名.移除.删除favo ...
- vue项目中,接手别人代码的,如何去分析?
首先拿到别人的代码的时候去分析以下几个事情.这里使用VUE项目举例, 一.首先观察package.json 看看是否是脚手架搭建,以及跑项目命令.分析是脚手架几 2 ? 3 ?4? npm run d ...
- 在react项目中编写css,更好的在react项目中写css代码--emotion
简介: emotion是一个JavaScript库,使用emotion可以用写js的方式写css代码.在react中安装emotion后,可以很方便进行css的封装,复用.使用emotion后,浏览器 ...
- SpringBoot项目中Controller层代码编写规范整理
文章目录 Controller层代码规范 SpringMVC接口定义要注意以下常见的几种问题 1. 返回格式不统一 2. 没有考虑失败情况 3. 出现和业务无关的输入参数 Controller层代码规 ...
- pycharm 如何将同一项目中不同模块代码分屏显示
如图,想把这两个模块代码分屏显示 直接拖动其中一个代码的标签到另一个屏幕上 点击全屏显示
- android开发使用c+_如何在Android项目中开始使用C ++代码
android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...
最新文章
- 汇编语言中寻址方式[bx + idata]
- matlab-画图函数:scatter和plot
- 干货 | 图解 https 单向认证和双向认证!
- java设计模式之【策略模式】
- 【-】WebKit Layout (布局)
- HttpRequest Java原生代码封装
- 【ZOJ - 3211】Dream City (01背包类问题,贪心背包)
- unityShader物体表面流光效果
- Partial Dependence Plots - 部分依赖图实践
- windows10下安装choco
- 【不忘初心】经典珍藏 LTSB|1709|1809|LTSC 四版集合八合一[纯净精简版]2020.07.20
- 10个200万的网络监控摄像机应该配置百兆还是千兆的交换机?
- 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云
- Shell | 文件或关键字查询
- 我是CTO,我为CEO吹过的牛逼买单!
- NSIS Error的解决办法
- bugku 你必须让他停下
- 麦肯锡称三年内将会发生金融AI大变革
- c#通过POST方式读取HTTP数据(包括使用Postman软件对比)
- java基于Android停车场地图导航停车APP-小程序