本系列主要解决的问题:针对一个功能庞大的企业应用 + 应用面对不同区域的众多客户,如何做好应用的多版本管理、各区域线上模块的快速更新及系统的稳定性保障,可以采取对应用进行核心模块按模块化方式进行管理。
产生背景:
2017年接手一个已经维护了7年多的老项目,项目经历了几波人的维护,混杂了各种开发技术(JSP、Hibernate2.x、jdbc、spring、springmvc、Jquery1.x、Jquery2.x、bootstrap等),项目的结构也很混乱,依赖Jar的版本也很老(大部分是7年度的版本)。入驻项目的时候,主要待解决的问题:系统数据库经常死锁,客户端响应十分慢,各地版本发布混乱差异化功能多是硬编码。
虽然项目已经举步维艰了,市场前景却很好,已经为公司攻城拔寨全国好多区域了。为了快速响应客户的需求,势必每周要有线上版本更新,项目通过GIT进行版本控制,接手时GIT已经有50多个分支版本。看着头就痛!
初步解决方案:
1、数据库卡顿问题(项目使用sqlserver)
优化关键业务的SQL(对查询增加 WITH (NOLOCK)),优化数据库关联字段的类型(保持类型一致、长度一致),升级hibernate4.x版本
2、GIT版本合并成一个开放版本(开放一个版本 + 各地发布前生成测试版本)
对各版本的差异化功能,通过配置文件进行控制,配置文件采用 一主文件配置 + 多文件各地差异配置,发布的时候通过修改主配置文件的差异配置文件进行控制。
3、统一开发技术
前端采用:Vue + Elment-UI,后端采用:Spring4.3.x + SpringMVC + Mybatis
4、制定开发规范
团队开发要高效,大家必须遵循一定游戏规则,才能解决不必要的沟通成本。
5、通过敏捷的开发方式重构关键业务模块。
存在问题:
1、因为整个项目依旧在一个工程里,版本发布无法做到基于模块版本更新,发布前的测试也无法针对更新模块独立测试(无法保证更新模块与其他模块的边界问题)
2、团队的组员日常工作没有重点,各个模块穿插着开发。无法保障系统的稳定性。
为了解决这些问题,尝试采用模块化拆分项目,建立模块领域模型,将整个项目划分成多个模块,各模块完成本模块的所有业务功能,同时提供对其他模块的服务,发布时通过组装子模块的方式对外发布;测试人员只需针对更新的模块进行测试。对团队按模块进行人员划分,保证核心模块开发人员的稳定性。
模块化主要实现方式:
1、架构图:
2、模块化主要分层 4层 构建:
1)基础技术框架层:提供前后端开发资源及其版本的控制,提供能力:缓存服务、系统配置服务、工具类(字符、日期、文件等);
2)系统管理模块层:基于基础框架,实现各项目的基础管理模块,提供能力:字典、图标、菜单、用户、角色、权限管理、机构管理等;
3)业务领域模块层:基于基础框架,实现本业务模块的所有业务功能及对外的服务;
4)应用发布层:通过Maven构建方式组织应用需要的模块,构建发布应用。
原文地址:https://www.cnblogs.com/xiaoliang-y/p/8966274.html