本系列主要解決的問題:針對一個功能龐大的企業應用 + 應用面對不一樣區域的衆多客戶,如何作好應用的多版本管理、各區域線上模塊的快速更新及系統的穩定性保障,能夠採起對應用進行核心模塊按模塊化方式進行管理。前端
產生背景:spring
2017年接手一個已經維護了7年多的老項目,項目經歷了幾波人的維護,混雜了各類開發技術(JSP、Hibernate2.x、jdbc、spring、springmvc、Jquery1.x、Jquery2.x、bootstrap等),項目的結構也很混亂,依賴Jar的版本也很老(大部分是7年度的版本)。入駐項目的時候,主要待解決的問題:系統數據庫常常死鎖,客戶端響應十分慢,各地版本發佈混亂差別化功能可能是硬編碼。sql
雖然項目已經舉步維艱了,市場前景卻很好,已經爲公司攻城拔寨全國好多區域了。爲了快速響應客戶的需求,勢必每週要有線上版本更新,項目經過GIT進行版本控制,接手時GIT已經有50多個分支版本。看着頭就痛!數據庫
初步解決方案:bootstrap
一、數據庫卡頓問題(項目使用sqlserver)後端
優化關鍵業務的SQL(對查詢增長 WITH (NOLOCK)),優化數據庫關聯字段的類型(保持類型一致、長度一致),升級hibernate4.x版本緩存
二、GIT版本合併成一個開放版本(開放一個版本 + 各地發佈前生成測試版本)架構
對各版本的差別化功能,經過配置文件進行控制,配置文件採用 一主文件配置 + 多文件各地差別配置,發佈的時候經過修改主配置文件的差別配置文件進行控制。mvc
三、統一開發技術框架
前端採用:Vue + Elment-UI,後端採用:Spring4.3.x + SpringMVC + Mybatis
四、制定開發規範
團隊開發要高效,你們必須遵循必定遊戲規則,才能解決沒必要要的溝通成本。
五、經過敏捷的開發方式重構關鍵業務模塊。
存在問題:
一、由於整個項目依舊在一個工程裏,版本發佈沒法作到基於模塊版本更新,發佈前的測試也沒法針對更新模塊獨立測試(沒法保證更新模塊與其餘模塊的邊界問題)
二、團隊的組員平常工做沒有重點,各個模塊穿插着開發。沒法保障系統的穩定性。
爲了解決這些問題,嘗試採用模塊化拆分項目,創建模塊領域模型,將整個項目劃分紅多個模塊,各模塊完成本模塊的全部業務功能,同時提供對其餘模塊的服務,發佈時經過組裝子模塊的方式對外發布;測試人員只需針對更新的模塊進行測試。對團隊按模塊進行人員劃分,保證核心模塊開發人員的穩定性。
模塊化主要實現方式:
一、架構圖:
二、模塊化主要分層 4層 構建:
1)基礎技術框架層:提供先後端開發資源及其版本的控制,提供能力:緩存服務、系統配置服務、工具類(字符、日期、文件等);
2)系統管理模塊層:基於基礎框架,實現各項目的基礎管理模塊,提供能力:字典、圖標、菜單、用戶、角色、權限管理、機構管理等;
3)業務領域模塊層:基於基礎框架,實現本業務模塊的全部業務功能及對外的服務;
4)應用發佈層:經過Maven構建方式組織應用須要的模塊,構建發佈應用。