如何减少项目中的冗余代码?

  • 前言
  • 为什么会出现冗余代码
  • 如何解决
    • 提取公共请求/业务逻辑
    • 聚合函数的收敛
    • 能合并的函数进行合并
    • 善用配置表思维
  • 再会

前言

随着业务的不断迭代,项目代码会变得越来越多。如果前期不注意开发规范和代码层次结构规划,到后期项目中就会出现大量的冗余代码,维护困难。到最后,多是以重构,新建项目重写收尾。

原本,可以更好的。

本周双休,今天我们就来聊一下如何减少项目中的冗余代码。

为什么会出现冗余代码

结合我的经验来看,出现冗余代码的情况包括但不限于以下几个方面:

  • 对于公共请求/业务逻辑未做提取
  • 能收敛为聚合函数的函数直接提供给外部调用
  • 能合并的函数未合并
  • 相似结构的复制粘贴

如何解决

核心思想是能合并的合并,能提取的提取。

其实都是建议,这种东西,咬牙也能坚持。

能过就过,不能过还能离咋的?

提取公共请求/业务逻辑

比如对某项数据进行订阅和取消订阅,二者只是动作上的区别,参数是一致的。

  • 不要在每个模块下都写一份订阅和取消订阅的逻辑,提取到全局公共逻辑中

  • 不要写两个处理函数,用动作区分即可(以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)
}

善用配置表思维

之所以选择复制粘贴,是因为相似结构很多,对于这种情况,配置表+循环则是更优解。

再会

情如风雪无常,

却是一动即殇。

感谢你这么好看还来阅读我的文章,

我是冷月心,下期再见。

如何减少项目中的冗余代码?相关推荐

  1. 网页中调用matlab,在C#的Web项目中调用Matlab代码的步骤

    在C#的Web项目中调用Matlab代码的方法 为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果.前段时间已经拖延 ...

  2. 在项目中这样写代码的时候,请搭配红花油、跌打损伤酒一起使用

    前言 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码让我不禁感叹,代码规范这条道路还是任重而道远- 那么今天就来给大家总结一波Java中的代码小技巧,熟练掌握 ...

  3. 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片...

    在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就 ...

  4. 如何使用IntelliJ IDEA的Favorites来管理项目中的常用代码

    1.如何添加favorites 项目目录树中对想要添加的文件单击右键,选择add to favorites: 确定你想要放入的 favorites list 即可. 2.如何重命名.移除.删除favo ...

  5. vue项目中,接手别人代码的,如何去分析?

    首先拿到别人的代码的时候去分析以下几个事情.这里使用VUE项目举例, 一.首先观察package.json 看看是否是脚手架搭建,以及跑项目命令.分析是脚手架几 2 ? 3 ?4? npm run d ...

  6. 在react项目中编写css,更好的在react项目中写css代码--emotion

    简介: emotion是一个JavaScript库,使用emotion可以用写js的方式写css代码.在react中安装emotion后,可以很方便进行css的封装,复用.使用emotion后,浏览器 ...

  7. SpringBoot项目中Controller层代码编写规范整理

    文章目录 Controller层代码规范 SpringMVC接口定义要注意以下常见的几种问题 1. 返回格式不统一 2. 没有考虑失败情况 3. 出现和业务无关的输入参数 Controller层代码规 ...

  8. pycharm 如何将同一项目中不同模块代码分屏显示

    如图,想把这两个模块代码分屏显示 直接拖动其中一个代码的标签到另一个屏幕上 点击全屏显示

  9. android开发使用c+_如何在Android项目中开始使用C ++代码

    android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...

最新文章

  1. 汇编语言中寻址方式[bx + idata]
  2. matlab-画图函数:scatter和plot
  3. 干货 | 图解 https 单向认证和双向认证!
  4. java设计模式之【策略模式】
  5. 【-】WebKit Layout (布局)
  6. HttpRequest Java原生代码封装
  7. 【ZOJ - 3211】Dream City (01背包类问题,贪心背包)
  8. unityShader物体表面流光效果
  9. Partial Dependence Plots - 部分依赖图实践
  10. windows10下安装choco
  11. 【不忘初心】经典珍藏 LTSB|1709|1809|LTSC 四版集合八合一[纯净精简版]2020.07.20
  12. 10个200万的网络监控摄像机应该配置百兆还是千兆的交换机?
  13. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云
  14. Shell | 文件或关键字查询
  15. 我是CTO,我为CEO吹过的牛逼买单!
  16. NSIS Error的解决办法
  17. bugku 你必须让他停下
  18. 麦肯锡称三年内将会发生金融AI大变革
  19. c#通过POST方式读取HTTP数据(包括使用Postman软件对比)
  20. java基于Android停车场地图导航停车APP-小程序

热门文章

  1. Python超市管理系统毕业设计源码111042
  2. 这30个CSS选择器,你必须熟记(上)
  3. 分布式IM原理与实战: 从0到1打造即时通讯云
  4. 软件测试培训有就业保障吗?
  5. ORA-12516错误的处理
  6. springboot+个人博客 毕业设计-附源码191613
  7. 解决:flex布局之 flex-wrap:wrap 自动换行属性,导致上下两行div中间有空行
  8. 360手机官方刷机教程(N6系列+N7系列通用)
  9. 基于对接化合物库虚拟筛选(Virtual Screening)
  10. 移民就移民了,别拉祖国来垫背