1. 程式人生 > >SSM(十) 項目重構-互聯網項目的Maven結構

SSM(十) 項目重構-互聯網項目的Maven結構

不用 子模塊 artifact 項目 blog 箭頭 分享圖片 理解 sso

前言

很久沒有更新博客了,之前定下周更逐漸成了月更。怎麽感覺像我追過的一部動漫。
這個博文其實很早就想寫了。
之前所有的代碼都是在一個模塊裏面進行開發,這和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的類型。

總結

這次沒有實現什麽特別的功能,只是對一些還沒有接觸過這種項目結構開發的童鞋能起到一些引導作用。

SSM(十) 項目重構-互聯網項目的Maven結構