模块化工程构建系列(一)

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

  产生背景:

  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

时间: 2024-10-14 22:40:16

模块化工程构建系列(一)的相关文章

记一次前端工程构建

需求背景 我所在的项目组主要负责公司的A产品A1模块的界面开发.经过上半年紧锣密鼓.加班加点地开发之后,终于在7月份在国内的L局点成功上线.当时那个激动啊,苦逼的生活终于过去了,大家都跟我high起来!可是到了下半年,由于公司市场人员的给力表现,又在海外开拓了D局点和T局点,真是喜(yu)大(ku)普(wu)奔(lei)啊! 由于L局点的需求还没有明确,所以L局点的事情先按住不表,先说说D局点的需求.其实,客户的实际要求也不多,对于界面来说,无非是整体风格要与客户现有的产品保持一致.所以最终预计

Eclipse的Java工作集和多工程构建路径

一.Java工作集: Eclipse有一个小功能,就是创建Java Working Set.它的作用是解决Package Explorer窗格中创建很多工程时出现拥挤的麻烦. 在创建(New对话框)时可以加入原来存在的Java工程.创建完后,在左方Package Explorer窗格的右上方下拉菜单中选择Select Working Set然后选择Selected Working Sets打开创建的工作集.之后切换就可以直接在下拉菜单中选择即可(自动出现在下拉菜单中). 如果希望加入新的工程到工

Gradle学习(四) web工程构建

Gradle为应用开发提供了两个相关的插件:war plugin以及jetty plugin war plugin继承了java plugin为你的工程构建war包,jetty pugin继承了war plugin可以让的工程构建在嵌入式容器jetty中 构建War文件 首先在你的build.gradle中添加如下一行 apply plugin: 'war' 由于war plugin继承了java plugin,所有java plugin也会被默认的加入配置文件中 运行gradle build命

Jenkins+Maven动态工程构建--第三方服务依赖解耦的一种思路

持续集成是敏捷领域的一项基本实践,Jenkins是目前市面上主流的持续集成工具.关于持续集成和Jenkins可以讨论的话题很多,本文描述的是一种使用Jenkins结合Maven进行动态工程构建的思路,用于进行系统开发过程中对第三方服务依赖的解耦. 一.  场景 在系统设计和实现过程中,尤其是涉及到多方集成的系统开发,我们经常会遇到这样的场景:即目标系统需要依赖于某些第三方的服务实现,而这些第三方的服务实现通常有其进度安排,会和目标系统平行开发,也就是说在目标系统开发调试过程中,第三方服务往往还无

一天一工程总结系列-7.2

20157.2一天一工程总结系列对各类优秀工程的剖析和拙见.有些胡言乱语还请作者谅解. VBFPopFlatButton1.执行多次的单例#define AGEColorImplement(COLOR_NAME,RED,GREEN,BLUE)    \+ (UIColor *)COLOR_NAME{    \    static UIColor* COLOR_NAME##_color;    \    static dispatch_once_t COLOR_NAME##_onceToken; 

Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成

<SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关于敏捷开发.自动化构建与持续集成的思考就作为开题篇吧. 敏捷是什么? 敏捷是一把伞,这把伞下边有XP.Scrum.FDD...,当然也包括自动化构建.持续集成,其实符合敏捷思想的开发方法.工具,如Jenkins都可以属于敏捷开发的范畴,上课时的PPT: 敏捷到底是什么? 其实关于敏捷的定义有很多,Bob Ji

前端工程构建总结

什么是前端工程构建,我们先回想一下. 开发中,我们很多时候只需要关心业务代码,而不用过多关心业务以外的,打包.兼容.优化.部署等等工作. 简单说,工程构建就是打通开发链路,让开发可以专注于项目本身. 解决了什么 在拥有较完善的工程构建以前,前端经常面临这些问题: 大量js文件通过script标签引入,造成管理困难,页面加载缓慢. css编写效率低,兼容性问题多,全靠手动自己解决. 经常耗费大量时间手动传资源到CDN,改静态资源路径. 甚至手动拷贝代码到后端工程. 等等很多效率低下.易犯错,与业务

自己动手开发编译器(一)编译器的模块化工程

本系列的第一篇,我想概述一下编译器的构造,同时帮助大家了解编译器中各个组成部分的用途.想必大家看别的编译原理书籍,大都在第一章或者序言之类的地方,将编译器分成许多模块,然后每一个模块负责编译的特定阶段,最后串起来组成完整的编译器.比如下面这张图就是虎书(Modern Compiler by Andrew W. Appel)第一章中出现的编译器阶段示意图: 那么,为什么要将编译器拆成一个个阶段,一个个模块呢?答案是,为了更加容易设计和理解.一个完成编译器怎么也算是一项大工程,如果不将其分解,将是非

工程课题 : 商城系统 - logs 1 工程构建

github : https://github.com/RudolphBrown/Project/blob/master/shopping-mall-log1.zip maven工程创建方式有三种:jar, pom, war, 三种打包方式在工程中运用很巧妙,一个web-app组件只需要一个war包模块,而其余可以打包成jar包,pom包用来聚合所有子包. log 1: 创建项目所有模块祖先模块 项目使用模块化开发,所以构建的时候分为多个主题进行构建. 用途 : 规定所有jar包的版本信息,并不