目前负责一套基础开发框架产品的研发,从0到1开始已历经两年时间,日趋稳定。希望通过本系列文章记录下产品研发过程中的方方面面,归纳总结沉淀下来。
一、背景
传统行业,以项目为单位。在没有产品之前,所属部门所有人员打散进入一个个的项目,根据客户需求进行开发。Java体系,这个时候,各个项目基本上由各项目的技术负责人搭建项目开发环境,架构设计,模块拆分。完事后,再安排开发人员根据需求开发。之后,测试上线,最终验收,完成整个项目开发流程。之后再辗转新的项目,或者继续做该项目的下一期项目。
这样的项目开发方式会带来如下问题:
大量冗余工作。比如开发环境搭建,登录、首页、菜单、权限、人员管理、系统监控等公共需求基本上在每个项目中都得重新开发一遍。
技术债务风险。主要技术的选型往往由各个项目的技术负责人确定,一些零散的组件,比如前端常用的图表、树、弹出框等基础组件往往由实际开发人员决定。带来所用技术混乱,后期运维成本提高。
对开发人员要求提高。项目与项目之间技术风格迥异,开发人员转项目往往得重新学习了解一套新的技术体系。从一个项目的熟手变为另一项目的生手。
技术、经验无法沉淀。对于传统行业,技术与行业实施经验才是无价之宝。由于各项目单打独斗,项目与项目间经验无法复用,知识很难沉淀。
二、基础开发框架产品
为了解决上述问题,引入基础开发框架产品。所有项目的实施都以该基础框架产品为基座进行开发。该基座包含如下几点:
- 整体架构前后端分离,使用RESTFULL进行前后端数据交互
- 前后端技术体系统一
- 由基础开发框架组负责技术选型,确定技术路线。比如React、Vue、Angular到表格组件,图表组件到底用哪个之类问题
- 应用部分:提供登录、首页、菜单、人员管理、权限管理、字典管理、系统监控等通用模块
- 前端部分:统一技术栈。提供通用前端开发组件,开发结构规范,提供公共的前端压缩合并以及缓存解决方案。
- 安全:统一的XSS、CSRF、SQL注入等安全问题解决方案
- 统一的框架级异常处理
- 可平滑升级
- 提供问题反馈、建议提交平台,构建正循环生态环境
- ……
总之,属于项目开发公共的部分都放入其中,随着项目的不断实施,不断的总结出新的组件,不断的完善现有基础组件。
三、带来的好处
- 开发实施效率明显提升
- 项目后期维护成本降低
- 技术路线统一后项目开发人员的技术学习成本降低
- 基于同一套基础开发框架,A项目中的闪光点可直接搬到B项目中
- 由基础开发框架组造完轮子后避免各个项目重复造轮子
- 形成公司核心竞争力