前言
很久沒有更新部落格了,之前定下週更逐漸成了月更。怎麼感覺像我追過的一部動漫。
這個博文其實很早就想寫了。
之前所有的程式碼都是在一個模組裡面進行開發,這和maven的理念是完全不相符的,最近硬是抽了一個時間來對專案的結構進行了一次重構。
先來看看這次重構之後的目錄結構
為什麼需要分模組
至於為什麼要分模組呢?
我們設想一個這樣的場景:
在現在的網際網路開發中,會把一個很大的系統拆分成各個子系統用於降低他們之間的耦合度。
在一個子專案中通常都會為API
、WEB
、Service
等模組。
而且當專案夠大時,這些通常都不是一個人能完成的工作,需要一個團隊來各司其職。
想象一下:當之前所有的專案都在一個模組的時候,A改動了API,需要Deploy
程式碼。而B也改動了service
的程式碼,但並沒有完全做完。所以A在提交build
的時候就會報錯
而且在整個專案足夠大的時候,這個build
的時間也是很影響效率的。
但讓我將各個模組之間分開之後效果就不一樣了。我修改了API
我就只需要管我的就行,不需要整個專案進行build
。
而且當有其他專案需要依賴我這個API
的時候也只需要依賴API
即可,不用整個專案都依賴過去。
各個模組的作用
來看下這次我所分的模組。
ROOT
這是整個專案的根節點。
先看一下其中的pom.xml
:
<groupId>com.crossoverJie</groupId>
<artifactId>SSM</artifactId>
<packaging>pom</packaging>
<version>2.0.0</version>
<modules>
<module>SSM-API</module>
<module>SSM-BOOT</module>
<module>SSM-SERVICE</module>
<module>SSM-WEB</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.4.RELEASE</spring.version>
<jackson.version>2.5.0</jackson.version>
<lucene.version>6.0.1</lucene.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.crossoverJie</groupId>
<artifactId>SSM-API</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>複製程式碼
我擷取了其中比較重點的配置。
由於這是父節點,所以我的packag
型別使用的是pom
。
其中分別有著四個子模組。
其中重點看下<dependencyManagement>
這個標籤。
如果使用的是IDEA
這個開發工具的話是可以看到如下圖:
標紅的有一個向下的箭頭,點一下就可以進入子模組中相同的依賴。
這樣子模組就不需要配置具體的版本了,統一由父模組來進行維護,對之後的版本升級也帶來了好處。
SSM-API
接下來看下API
這個模組:
通常這個模組都是用於定義外部介面的,以及改介面所依賴的一些DTO類
。
一般這個模組都是拿來給其他專案進行依賴,並和本專案進行資料互動的。
SSM-BOOT
BOOT
這個模組比較特殊。
可以看到這裡沒有任何程式碼,只有一個rpc
的配置檔案。
通常這個模組是用於給我們內部專案進行依賴的,並不像上面的API
模組一樣給其他部門或者是專案進行依賴的。
因為在我們的RPC
呼叫的時候,用dubbo
來舉例,是需要配置所依賴的consumer
。
但如果是我們自己內部呼叫的話我們就可以把需要呼叫自己的dubbo
服務提供者配置在這裡,這樣的話我們自己呼叫就只需要依賴這個BOOT
就可以進行呼叫了。
哦對了,BOOT
同時還會依賴API
,這樣才實現了只依賴BOOT
就可以呼叫自己內部的dubbo
服務了。
如下所示:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.crossoverJie</groupId>
<artifactId>SSM-API</artifactId>
</dependency>
</dependencies>複製程式碼
SSM-SERVICE
SERVICE
模組就比較好理解了。
是處理具體業務邏輯的地方,也是對之前的API的實現。
通常這也是一個web
模組,所以我的pom
型別是WAR
。
SSM-WEB
其實WEB
模組和SERVICE
模組有點重合了。通常來說這個模組一般在一個對外提供http
訪問介面的專案中。
這裡只是為了展示專案結構,所以也寫在了這裡。
他的作用和service
差不多,都是WAR
的型別。
總結
這次沒有實現什麼特別的功能,只是對一些還沒有接觸過這種專案結構開發的童鞋能起到一些引導作用。
具體原始碼還請關注我的github
。
個人部落格地址:crossoverjie.top。
GitHub地址:github.com/crossoverJi…。