自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SSM(十) 項(xiàng)目重構(gòu)-互聯(lián)網(wǎng)項(xiàng)目的Maven結(jié)構(gòu)

開發(fā) 項(xiàng)目管理
這個(gè)博文其實(shí)很早就想寫了。 之前所有的代碼都是在一個(gè)模塊里面進(jìn)行開發(fā),這和maven的理念是完全不相符的,最近硬是抽了一個(gè)時(shí)間來(lái)對(duì)項(xiàng)目的結(jié)構(gòu)進(jìn)行了一次重構(gòu)。

前言

很久沒(méi)有更新博客了,之前定下周更逐漸成了月更。怎么感覺像我追過(guò)的一部動(dòng)漫。 這個(gè)博文其實(shí)很早就想寫了。 之前所有的代碼都是在一個(gè)模塊里面進(jìn)行開發(fā),這和maven的理念是完全不相符的,最近硬是抽了一個(gè)時(shí)間來(lái)對(duì)項(xiàng)目的結(jié)構(gòu)進(jìn)行了一次重構(gòu)。

前言

很久沒(méi)有更新博客了,之前定下周更逐漸成了月更。怎么感覺像我追過(guò)的一部動(dòng)漫。 這個(gè)博文其實(shí)很早就想寫了。 之前所有的代碼都是在一個(gè)模塊里面進(jìn)行開發(fā),這和maven的理念是完全不相符的,最近硬是抽了一個(gè)時(shí)間來(lái)對(duì)項(xiàng)目的結(jié)構(gòu)進(jìn)行了一次重構(gòu)。

[[184668]]

先來(lái)看看這次重構(gòu)之后的目錄結(jié)構(gòu)

1.jpg

為什么需要分模塊

至于為什么要分模塊呢?

我們?cè)O(shè)想一個(gè)這樣的場(chǎng)景: 在現(xiàn)在的互聯(lián)網(wǎng)開發(fā)中,會(huì)把一個(gè)很大的系統(tǒng)拆分成各個(gè)子系統(tǒng)用于降低他們之間的耦合度。

在一個(gè)子項(xiàng)目中通常都會(huì)為API、WEBService等模塊。 而且當(dāng)項(xiàng)目夠大時(shí),這些通常都不是一個(gè)人能完成的工作,需要一個(gè)團(tuán)隊(duì)來(lái)各司其職。

想象一下:當(dāng)之前所有的項(xiàng)目都在一個(gè)模塊的時(shí)候,A改動(dòng)了API,需要Deploy代碼。而B也改動(dòng)了service的代碼,但并沒(méi)有完全做完。所以A在提交build的時(shí)候就會(huì)報(bào)錯(cuò)

而且在整個(gè)項(xiàng)目足夠大的時(shí)候,這個(gè)build的時(shí)間也是很影響效率的。

但讓我將各個(gè)模塊之間分開之后效果就不一樣了。我修改了API我就只需要管我的就行,不需要整個(gè)項(xiàng)目進(jìn)行build。

而且當(dāng)有其他項(xiàng)目需要依賴我這個(gè)API的時(shí)候也只需要依賴API即可,不用整個(gè)項(xiàng)目都依賴過(guò)去。

各個(gè)模塊的作用

來(lái)看下這次我所分的模塊。

ROOT

這是整個(gè)項(xiàng)目的根節(jié)點(diǎn)。 先看一下其中的pom.xml

  1. <groupId>com.crossoverJie</groupId> 
  2.     <artifactId>SSM</artifactId> 
  3.     <packaging>pom</packaging> 
  4.     <version>2.0.0</version> 
  5.  
  6.     <modules> 
  7.         <module>SSM-API</module> 
  8.         <module>SSM-BOOT</module> 
  9.         <module>SSM-SERVICE</module> 
  10.         <module>SSM-WEB</module> 
  11.     </modules> 
  12.  
  13.     <properties> 
  14.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  15.         <spring.version>4.1.4.RELEASE</spring.version> 
  16.         <jackson.version>2.5.0</jackson.version> 
  17.         <lucene.version>6.0.1</lucene.version> 
  18.     </properties> 
  19.  
  20.  
  21.     <dependencyManagement> 
  22.  
  23.         <dependencies> 
  24.             <dependency> 
  25.                 <groupId>com.crossoverJie</groupId> 
  26.                 <artifactId>SSM-API</artifactId> 
  27.                 <version>2.0.0</version> 
  28.             </dependency> 
  29.          </dependencies> 
  30.     </dependencyManagement> 

我截取了其中比較重點(diǎn)的配置。

由于這是父節(jié)點(diǎn),所以我的packag類型使用的是pom。 其中分別有著四個(gè)子模塊。

其中重點(diǎn)看下<dependencyManagement>這個(gè)標(biāo)簽。 如果使用的是IDEA這個(gè)開發(fā)工具的話是可以看到如下圖:

2.jpg

標(biāo)紅的有一個(gè)向下的箭頭,點(diǎn)一下就可以進(jìn)入子模塊中相同的依賴。 這樣子模塊就不需要配置具體的版本了,統(tǒng)一由父模塊來(lái)進(jìn)行維護(hù),對(duì)之后的版本升級(jí)也帶來(lái)了好處。

SSM-API

接下來(lái)看下API這個(gè)模塊:

通常這個(gè)模塊都是用于定義外部接口的,以及改接口所依賴的一些DTO類。 一般這個(gè)模塊都是拿來(lái)給其他項(xiàng)目進(jìn)行依賴,并和本項(xiàng)目進(jìn)行數(shù)據(jù)交互的。

SSM-BOOT

BOOT這個(gè)模塊比較特殊。 可以看到這里沒(méi)有任何代碼,只有一個(gè)rpc的配置文件。 通常這個(gè)模塊是用于給我們內(nèi)部項(xiàng)目進(jìn)行依賴的,并不像上面的API模塊一樣給其他部門或者是項(xiàng)目進(jìn)行依賴的。

因?yàn)樵谖覀兊?code>RPC調(diào)用的時(shí)候,用dubbo來(lái)舉例,是需要配置所依賴的consumer

但如果是我們自己內(nèi)部調(diào)用的話我們就可以把需要調(diào)用自己的dubbo服務(wù)提供者配置在這里,這樣的話我們自己調(diào)用就只需要依賴這個(gè)BOOT就可以進(jìn)行調(diào)用了。

哦對(duì)了,BOOT同時(shí)還會(huì)依賴API,這樣才實(shí)現(xiàn)了只依賴BOOT就可以調(diào)用自己內(nèi)部的dubbo服務(wù)了。 如下所示:

  1. <dependencies> 
  2.         <dependency> 
  3.             <groupId>junit</groupId> 
  4.             <artifactId>junit</artifactId> 
  5.             <scope>test</scope> 
  6.         </dependency> 
  7.  
  8.         <dependency> 
  9.             <groupId>com.crossoverJie</groupId> 
  10.             <artifactId>SSM-API</artifactId> 
  11.         </dependency> 
  12.  
  13.     </dependencies> 

SSM-SERVICE

SERVICE模塊就比較好理解了。 是處理具體業(yè)務(wù)邏輯的地方,也是對(duì)之前的API的實(shí)現(xiàn)。

通常這也是一個(gè)web模塊,所以我的pom類型是WAR。

SSM-WEB

其實(shí)WEB模塊和SERVICE模塊有點(diǎn)重合了。通常來(lái)說(shuō)這個(gè)模塊一般在一個(gè)對(duì)外提供http訪問(wèn)接口的項(xiàng)目中。

這里只是為了展示項(xiàng)目結(jié)構(gòu),所以也寫在了這里。

他的作用和service差不多,都是WAR的類型。

總結(jié)

這次沒(méi)有實(shí)現(xiàn)什么特別的功能,只是對(duì)一些還沒(méi)有接觸過(guò)這種項(xiàng)目結(jié)構(gòu)開發(fā)的童鞋能起到一些引導(dǎo)作用。

具體源碼還請(qǐng)關(guān)注我的github。

項(xiàng)目地址:https://github.com/crossoverJie/SSM.git

個(gè)人博客地址:http://crossoverjie.top

GitHub地址:https://github.com/crossoverJie。

先來(lái)看看這次重構(gòu)之后的目錄結(jié)構(gòu)

1.jpg

為什么需要分模塊

至于為什么要分模塊呢?

我們?cè)O(shè)想一個(gè)這樣的場(chǎng)景: 在現(xiàn)在的互聯(lián)網(wǎng)開發(fā)中,會(huì)把一個(gè)很大的系統(tǒng)拆分成各個(gè)子系統(tǒng)用于降低他們之間的耦合度。

在一個(gè)子項(xiàng)目中通常都會(huì)為API、WEB、Service等模塊。 而且當(dāng)項(xiàng)目夠大時(shí),這些通常都不是一個(gè)人能完成的工作,需要一個(gè)團(tuán)隊(duì)來(lái)各司其職。

想象一下:當(dāng)之前所有的項(xiàng)目都在一個(gè)模塊的時(shí)候,A改動(dòng)了API,需要Deploy代碼。而B也改動(dòng)了service的代碼,但并沒(méi)有完全做完。所以A在提交build的時(shí)候就會(huì)報(bào)錯(cuò)

而且在整個(gè)項(xiàng)目足夠大的時(shí)候,這個(gè)build的時(shí)間也是很影響效率的。

但讓我將各個(gè)模塊之間分開之后效果就不一樣了。我修改了API我就只需要管我的就行,不需要整個(gè)項(xiàng)目進(jìn)行build。

而且當(dāng)有其他項(xiàng)目需要依賴我這個(gè)API的時(shí)候也只需要依賴API即可,不用整個(gè)項(xiàng)目都依賴過(guò)去。

各個(gè)模塊的作用

來(lái)看下這次我所分的模塊。

ROOT

這是整個(gè)項(xiàng)目的根節(jié)點(diǎn)。 先看一下其中的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> 

我截取了其中比較重點(diǎn)的配置。

由于這是父節(jié)點(diǎn),所以我的packag類型使用的是pom。 其中分別有著四個(gè)子模塊。

其中重點(diǎn)看下<dependencyManagement>這個(gè)標(biāo)簽。 如果使用的是IDEA這個(gè)開發(fā)工具的話是可以看到如下圖:

2.jpg

標(biāo)紅的有一個(gè)向下的箭頭,點(diǎn)一下就可以進(jìn)入子模塊中相同的依賴。 這樣子模塊就不需要配置具體的版本了,統(tǒng)一由父模塊來(lái)進(jìn)行維護(hù),對(duì)之后的版本升級(jí)也帶來(lái)了好處。

SSM-API

接下來(lái)看下API這個(gè)模塊:

通常這個(gè)模塊都是用于定義外部接口的,以及改接口所依賴的一些DTO類。 一般這個(gè)模塊都是拿來(lái)給其他項(xiàng)目進(jìn)行依賴,并和本項(xiàng)目進(jìn)行數(shù)據(jù)交互的。

SSM-BOOT

BOOT這個(gè)模塊比較特殊。 可以看到這里沒(méi)有任何代碼,只有一個(gè)rpc的配置文件。 通常這個(gè)模塊是用于給我們內(nèi)部項(xiàng)目進(jìn)行依賴的,并不像上面的API模塊一樣給其他部門或者是項(xiàng)目進(jìn)行依賴的。

因?yàn)樵谖覀兊?code>RPC調(diào)用的時(shí)候,用dubbo來(lái)舉例,是需要配置所依賴的consumer。

但如果是我們自己內(nèi)部調(diào)用的話我們就可以把需要調(diào)用自己的dubbo服務(wù)提供者配置在這里,這樣的話我們自己調(diào)用就只需要依賴這個(gè)BOOT就可以進(jìn)行調(diào)用了。

哦對(duì)了,BOOT同時(shí)還會(huì)依賴API,這樣才實(shí)現(xiàn)了只依賴BOOT就可以調(diào)用自己內(nèi)部的dubbo服務(wù)了。 如下所示:

    <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模塊就比較好理解了。 是處理具體業(yè)務(wù)邏輯的地方,也是對(duì)之前的API的實(shí)現(xiàn)。

通常這也是一個(gè)web模塊,所以我的pom類型是WAR。

SSM-WEB

其實(shí)WEB模塊和SERVICE模塊有點(diǎn)重合了。通常來(lái)說(shuō)這個(gè)模塊一般在一個(gè)對(duì)外提供http訪問(wèn)接口的項(xiàng)目中。

這里只是為了展示項(xiàng)目結(jié)構(gòu),所以也寫在了這里。

他的作用和service差不多,都是WAR的類型。

總結(jié)

這次沒(méi)有實(shí)現(xiàn)什么特別的功能,只是對(duì)一些還沒(méi)有接觸過(guò)這種項(xiàng)目結(jié)構(gòu)開發(fā)的童鞋能起到一些引導(dǎo)作用。

具體源碼還請(qǐng)關(guān)注我的github

項(xiàng)目地址:https://github.com/crossoverJie/SSM.git

個(gè)人博客地址:http://crossoverjie.top。

GitHub地址:https://github.com/crossoverJie。

責(zé)任編輯:張燕妮 來(lái)源: 開源中國(guó)社區(qū)
相關(guān)推薦

2021-01-14 11:05:41

項(xiàng)目配置屬性

2011-06-03 09:59:52

移動(dòng)互聯(lián)網(wǎng)項(xiàng)目合作峰會(huì)移動(dòng)互聯(lián)網(wǎng)即將召開

2015-12-14 17:50:09

ENI經(jīng)濟(jì)和信息化網(wǎng)

2017-07-07 16:07:41

2010-08-31 11:31:21

2012-12-31 12:45:15

2012移動(dòng)互聯(lián)網(wǎng)

2018-01-15 14:42:51

大數(shù)據(jù)互聯(lián)網(wǎng)微信

2015-06-24 15:35:54

2017-03-15 09:00:22

互聯(lián)網(wǎng)易貨郎零售

2021-07-12 08:53:21

互聯(lián)網(wǎng) 行業(yè)數(shù)據(jù)

2009-12-07 09:32:40

2015-10-08 15:20:34

互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2016-07-18 18:47:07

互聯(lián)網(wǎng)+

2011-12-25 20:11:40

移動(dòng)

2017-08-24 08:33:51

審批監(jiān)管平臺(tái)

2022-09-01 10:49:54

物聯(lián)網(wǎng)MNO

2015-10-30 17:50:18

互聯(lián)網(wǎng)金融

2018-08-15 09:02:59

產(chǎn)業(yè)互聯(lián)網(wǎng)工業(yè)互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2015-09-22 09:17:33

互聯(lián)網(wǎng)發(fā)展史

2014-01-15 14:35:35

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)