參考文檔:
http://kyfxbl.iteye.com/blog/1680045 http://blog.csdn.net/wanghantong/article/details/36427411 http://my.oschina.net/lujianing/blog/354121
最近在整理公司軟件項目工程結構,最初的設計模塊間耦合度太高,過多的公共service與業務邏輯強相關。以至於后期要做集群系統的工作難以展開,於是這個時候選擇重構是唯一的辦法了。
很榮幸這個光榮而又艱巨的任務被老大交給我和另外一個有5年JAVA經驗的“老司機”,由於之前沒有干過重構這種高端大氣的活,這次也是抱着打打醬油瞻仰學習的態度來的,想想還有點小激動。
可惜人算不如天算,跟我合作的搭檔在接手2天后就辭職走人了,辭職的原因我是不得而知。但有個尷尬的問題就是:活誰干?這真令人絕望。。。
往事休要再提,反正又不是第一次被坑了,生活還得繼續。
重構的第一項工作是要先整出來一個新的工程結構,這里簡單記錄下,使用maven構建項目框架的過程。
基礎結構如下:
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,在前端做好負載均衡即可。
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>
(未完待續。。。)