參考文檔:前端
http://kyfxbl.iteye.com/blog/1680045 http://blog.csdn.net/wanghantong/article/details/36427411 http://my.oschina.net/lujianing/blog/354121
最近在整理公司軟件項目工程結構,最初的設計模塊間耦合度過高,過多的公共service與業務邏輯強相關。以致於後期要作集羣系統的工做難以展開,因而這個時候選擇重構是惟一的辦法了。web
很榮幸這個光榮而又艱鉅的任務被老大交給我和另一個有5年JAVA經驗的「老司機」,因爲以前沒有幹太重構這種高端大氣的活,此次也是抱着打打醬油瞻仰學習的態度來的,想一想還有點小激動。apache
惋惜人算不如天算,跟我合做的搭檔在接手2天后就辭職走人了,辭職的緣由我是不得而知。但有個尷尬的問題就是:活誰幹?這真使人絕望。。。api
往事休要再提,反正又不是第一次被坑了,生活還得繼續。服務器
重構的第一項工做是要先整出來一個新的工程結構,這裏簡單記錄下,使用maven構建項目框架的過程。app
基礎結構以下:負載均衡
project |--business (核心業務) |--business-api |--business-service |--business-message |--business-dao |--business-web |--common (公共組件、服務、常量) |--common-component |--common-component-... |--common-service |--common-constants |--common-... |--management (管理臺) |--management-... |--taskserver (定時任務、批處理) |--msgserver (消息隊列)
模塊定義:框架
business是整個工程的核心模塊,它提供了對各終端(iOS、Android、Web&PC)的全部服務。異步
business-api做爲核心服務的提供者,基本上全部的業務操做都由它來完成,以war工程獨立運行。集羣方式下能夠多部署幾個api,在前端作好負載均衡便可。maven
business-service 和 business-dao(mapper&entity) 是api的具體實現,這2者以jar包的形式供api依賴調用。
business-message裏存放了對外的接口契約(intf)、請求(request)和響應體(response),以jar包發行,方便供第三方或其餘業務模塊調用。
business-web是咱們的前端服務器,主要完成渲染和呈現的功能。一些像報表這樣輕業務的功能能夠在這裏獨立完成。以war包形式發行,支持集羣部署。
common是公共組件部分,一些常量或第三方接入的工做能夠在這裏實現。
management是管理臺,主要提供一些對業務編排、配置的的功能。
taskserver批處理或定時任務服務器,獨立運行。
msgserver消息隊列服務器,主要用來協助核心服務模塊完成一些異步調用的工做。如發短信、消息推送等功能。
建立maven工程:
先建立一個父工程project用來作項目聚合
建立business,這裏選擇maven module或者maven project均可以,只要類型是pom就能夠。我喜歡平行結構這裏選擇maven project。大致步驟和上面雷同,惟獨最後一步:
在business下面建立2個war和3個jar模塊(maven module):
創建完成以下:
其餘模塊的創建過程跟這裏大同小異,再次略過。
依賴關係:
衆所周知maven的使用pom.xml來完成依賴管理,咱們能夠經過圖形化或者直接修改pom.xml的方式完成配置。
添加依賴後生成的pom.xml以下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.lichmama.project.business</groupId> <artifactId>business</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.lichmama.project.business.api</groupId> <artifactId>business-api</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.lichmama.project.business.service</groupId> <artifactId>business-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.lichmama.project.business.dao</groupId> <artifactId>business-dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.lichmama.project.business.message</groupId> <artifactId>business-message</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
(未完待續。。。)