模块化工程构建系列

Posted yxl_happy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块化工程构建系列相关的知识,希望对你有一定的参考价值。

  本系列主要解决的问题:针对一个功能庞大的企业应用 + 应用面对不同区域的众多客户,如何做好应用的多版本管理、各区域线上模块的快速更新及系统的稳定性保障,可以采取对应用进行核心模块按模块化方式进行管理。

  产生背景:

  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构建方式组织应用需要的模块,构建发布应用。

 

以上是关于模块化工程构建系列的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 构建机制 ② ( Groovy 语言 DSL 特性 | settings.gradle 配置文件解析 | 配置子模块工程目录 | 顶层配置 )

初识webpack

jenkins多模块工程怎么构建

Rest微服务构建 案例工程模块

STM8S系列基于STVD开发,自定义printf函数+TIM5精确延时函数模块化工程示例

maven maven项目构建ssh工程(父工程与子模块的拆分与聚合)