记一次 node 项目重构改进
摘要:经常听到有祖传的代码一说,就是一些项目经过了很长时间的维护,经过了很多人之手,业务逻辑堆叠的越来越多,然后就变成了一个越来越难以维护。
经常听到有祖传的代码一说,就是一些项目经过了很长时间的维护,经过了很多人之手,业务逻辑堆叠的越来越多,然后就变成了一个越来越难以维护。
前几个月,同事刚走,留下一个node支撑的Master/Slaver结构的分布的任务调度系统;
从运行部署角度看,现状是多个发布版本,而且版本依赖的node存在差异,而且部署需要手动进行一些依赖文件的拷贝;
从代码结构层面看,主要需要维护的版本,使用js语法编写,常常是大量的业务逻辑堆砌到了一个文件之中;
下面以Slaver为例,分析一些当前存在的问题,并且分析一些我考虑过的优化方案
首先我们看,Slaver部分包含了哪些模块和功能:
1.包含与Master之间的消息请求和响应;
2.包含了子任务的状态机;
3.包含了不同任务的处理细节;
从语法和性能角度看:
比较多的以对象类型和变长参数形式作为传参;
同文件中包含大量实体的定义和构造,过多的使用Object而不是定义实体对象,包含很多隐式的类型转换和冗长的元素引用;
大量的使用sync形式的io操作,过多的文件操作;
只有分散各处的错误打印,没有集中的错误定义;
变量命名没有规则,无法区分局部和全局的,存在重复的名称使用,加重了理解的难度;
变量的定义穿插分布,全局范围的函数调用穿插分散多处
嵌套多层的try...catch语句
持续性循环的任务设计造成服务器资源的浪费
函数中多处使用绝对路径,迁移移植性差
优化方案的考虑:
js=>Ts,采用typescript语法重新组织代码结构;(这个方案前同事已经开发了一个版本,由于升级的调整幅度有些大,实际上线后发现还有比较多的功能问题,版本暂时搁置)
js=>java,采用java重新开发相关逻辑(业务代码逻辑较多,工作量较大);
保留js语言不变,对原代码进行重构切分;
typescript/java相对于js都有更强的类型和更易于使用面向对象的软件设计的语法设计;
但是是不是采用js开发后端代码的就一定是个糟糕的选择呢,也不尽然,需要的更多的设计和规范坚持;
题外话,其实如果一个老系统运行的很好,也不需要在其基础上做大规模的二次开发,从投入成本角度看,我认为就没必要对这种项目进行重构了;
重构和解耦是软件开发中最长久的话题,
未完待续...
参考文档:

记一次 node 项目重构改进的更多相关文章
- 记一次Node项目的优化
这两天针对一个Node项目进行了一波代码层面的优化,从响应时间上看,是一次很显著的提升.一个纯粹给客户端提供接口的服务,没有涉及到页面渲染相关. 背景 首先这个项目是一个几年前的项目了,期间一直在新增 ...
- 《always run团队》第六次作业:团队项目系统设计改进与详细设计
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 作业链接地址 团队名称 always run 作业学习目标 掌握面向对象软件设计方法:(2)完善系统设计说明书,掌握面向对象详细设计内 ...
- 一个node项目的框架搭建流程
项目服务端编程语言node,前端js,数据库mongodb, 开发工具用webstorm. 使用express应用生成器,生成项目雏形. 安装应用生成器工具,命令是npm install expres ...
- iOS基于MVC的项目重构总结
关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你认为的MVC的问题,一定是你自己理解的问题(资深架构师请自动忽略本文). 行 ...
- Express创建并运行node项目(Jade和EJS模版引擎)
1.创建Node项目 [Jade模板] > express nodeJade express创建项目若不显示指定模板,默认使用Jade,以下写法都可以: express -jade nodeJa ...
- 转:iOS基于MVC的项目重构总结
转:http://www.cocoachina.com/ios/20160519/16346.html 关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说 ...
- node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins
前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...
- 《Dare To Dream》第六次作业:团队项目系统设计改进与详细设计
团队项目系统设计改进与详细设计 一.团队项目系统设计改进 任务1: a.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容. 初稿的不足:缺乏每个模块的具体业务流程详细设计和流程 ...
- 团队作业5——《Spring_Four》项目需求改进与系统设计
团队项目需求分析改进: 任务1: a.分析<基于Jsoup的大学生考试信息展示系统项目需求规格说明书>初稿的不足,特别是文档需求描述建模不完整的内容. 通过软件工程更深入的学习发现我们的需 ...
随机推荐
- 四博智慧物联系统入门示例-1.增加一个DHT11温湿度传感器
1.准备工作 DOIT农业控制开发板或者esp32模组,并下载 四博智慧物联系统快速入门-2.准备工作 章节中的固件 DHT11连接在端口01 使用快速入门注册的管理账号和用户 2.配置网络 3.绑定 ...
- 跳转语句—break,continue,goto
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h&g ...
- Linux expect用法介绍
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...
- 浅谈:C#中的非泛型集合
1.首先:ArrayList:非泛型集合 List:泛型集合 集合跟数组比较我们更容易理解.数组:1,长度固定2,数据类型预先声明 集合:1,长度可变2,数据类型预先声明的为泛型集合,数据类型不限定为 ...
- 多次调用Promise的then会返回什么?
//做饭 function cook(){ console.log('开始做饭.'); var p = new Promise(function(resolve, reject){ //做一些异步操作 ...
- 旧 WCF 项目成功迁移到 asp.net core web api
背景 接上一篇,放弃了 asp.net core + gRPC 的方案后,我灵光一闪,为什么不用 web api 呢?不也是 asp.net core 的吗?虽然 RESTful 不是强约束,客户端写 ...
- 面试官最爱的 volatile 关键字,这些问题你都搞懂了没?
前言 volatile相关的知识点,在面试过程中,属于基础问题,是必须要掌握的知识点,如果回答不上来会严重扣分的哦. volatile关键字基本介绍 volatile可以看成是synchronized ...
- unity探索者之支付宝支付,非第三方插件
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/8405044.html 支付宝的sdk接入方式和微信支付比较类似,大部分的工作也基本 ...
- unity探索者之socket传输protobuf字节流(一)
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6974229.html 近期在做一个棋牌项目,需要用到socket传输protobu ...
- graphics.h源代码下载
graphics.h源代码下载 /*graphics.h DefinitionsforGraphicsPackage. Copyright(c)BorlandInternational1987,198 ...