日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

多人多團(tuán)隊(duì)?wèi)?yīng)該如何實(shí)施微服務(wù)?版本如何管理?

來源: 責(zé)編: 時(shí)間:2024-01-02 09:28:02 215觀看
導(dǎo)讀大家好,我是飄渺。今天繼續(xù)更新DDD&微服務(wù)專欄,本篇主要與大家分享一下在多人團(tuán)隊(duì)中如何更好地組織代碼和版本控制。代碼倉庫分離首先,看看在多模塊多團(tuán)隊(duì)的情境下,應(yīng)該如何合理組織代碼。以Dailymart項(xiàng)目為例,目前的代碼

大家好,我是飄渺。今天繼續(xù)更新DDD&微服務(wù)專欄,本篇主要與大家分享一下在多人團(tuán)隊(duì)中如何更好地組織代碼和版本控制。Jvu28資訊網(wǎng)——每日最新資訊28at.com

代碼倉庫分離

首先,看看在多模塊多團(tuán)隊(duì)的情境下,應(yīng)該如何合理組織代碼。Jvu28資訊網(wǎng)——每日最新資訊28at.com

以Dailymart項(xiàng)目為例,目前的代碼組織方式是將所有的業(yè)務(wù)模塊和基礎(chǔ)組件都存放在一個(gè)代碼倉庫中,這種做法在小團(tuán)隊(duì)中較為常見,而且許多開源微服務(wù)腳手架也采用了這種組織結(jié)構(gòu)。Jvu28資訊網(wǎng)——每日最新資訊28at.com

然而,遺憾的是,這種代碼組織方式只適合小團(tuán)隊(duì)的使用。在涉及多個(gè)團(tuán)隊(duì)的大型項(xiàng)目中,每個(gè)團(tuán)隊(duì)負(fù)責(zé)獨(dú)立的開發(fā)模塊時(shí),這樣的代碼組織結(jié)構(gòu)很可能會引發(fā)問題。Jvu28資訊網(wǎng)——每日最新資訊28at.com

在多模塊多團(tuán)隊(duì)的開發(fā)中,每個(gè)模塊的發(fā)布日期和上線范圍可能各不相同。為了解決這個(gè)問題,通常需要在開發(fā)過程中創(chuàng)建多個(gè)分支,這導(dǎo)致多個(gè)分支版本并存的情況。Jvu28資訊網(wǎng)——每日最新資訊28at.com

這樣的情況下,每次上線都需要協(xié)調(diào)各團(tuán)隊(duì)進(jìn)行分支代碼合并。例如,從各自的特性Feature分支合并到一個(gè)統(tǒng)一的測試分支,然后從測試分支構(gòu)建部署鏡像進(jìn)行發(fā)布。然而,合并過程中一旦出現(xiàn)代碼沖突,就需要找相關(guān)人員進(jìn)行代碼合并,這不僅耗時(shí)耗力,而且容易出錯(cuò)。(我曾參與過一個(gè)多團(tuán)隊(duì)項(xiàng)目開發(fā),每次上線都是雞飛狗跳)Jvu28資訊網(wǎng)——每日最新資訊28at.com

因此,在多團(tuán)隊(duì)開發(fā)時(shí),我們建議按照業(yè)務(wù)模塊進(jìn)行代碼拆分,將每個(gè)業(yè)務(wù)模塊的代碼存放在獨(dú)立的代碼倉庫中。Jvu28資訊網(wǎng)——每日最新資訊28at.com

這樣,盡管各自團(tuán)隊(duì)可能仍然存在多分支開發(fā)的情況,但不再需要進(jìn)行統(tǒng)一的合并,從而極大地提高了開發(fā)部署的效率。Jvu28資訊網(wǎng)——每日最新資訊28at.com

同時(shí),需要將所有公共組件也放置于一個(gè)單獨(dú)的代碼倉庫中,業(yè)務(wù)模塊按需引入即可。Jvu28資訊網(wǎng)——每日最新資訊28at.com

接下來以Dailymart為例,介紹一下代碼如何拆分:Jvu28資訊網(wǎng)——每日最新資訊28at.com

1、DailyMart項(xiàng)目中包含了用戶、訂單、購物車、庫存、商品等多個(gè)模塊,這些模塊按照普通SpringBoot項(xiàng)目的形式組織代碼,并存放在不同的代碼倉庫中。Jvu28資訊網(wǎng)——每日最新資訊28at.com

2、將基礎(chǔ)組件模塊dailymart-starter和dailymart-dependencies模塊共同放置到另外一個(gè)單獨(dú)的倉庫中,業(yè)務(wù)模塊根據(jù)需要引入各自需要的組件。Jvu28資訊網(wǎng)——每日最新資訊28at.com

組件版本的統(tǒng)一管理

在大型項(xiàng)目中,需要統(tǒng)一規(guī)劃依賴組件的版本,在Maven項(xiàng)目中通常通過BOM(Bill Of Materials)來實(shí)現(xiàn)。Jvu28資訊網(wǎng)——每日最新資訊28at.com

BOM全稱是Bill Of Materials,譯作材料清單。BOM本身并不是一種特殊的文件格式,而是一個(gè)普通的POM文件,只是在這個(gè)POM中,我們羅列的是一個(gè)工程的所有依賴和其對應(yīng)的版本。該文件一般被其它工程使用,當(dāng)其它工程引用BOM中羅列的jar包時(shí),不用顯示指定具體的版本,會自動使用BOM對應(yīng)的jar版本。Jvu28資訊網(wǎng)——每日最新資訊28at.com

在Dailymart項(xiàng)目中,dailymart-dependencies就是一個(gè)BOM,在該文件中定義了項(xiàng)目所需組件的版本。其他模塊只需在pom文件的dependencyManagement中引入bom依賴,后面引入定義好的組件時(shí)就不再需要指定版本了。Jvu28資訊網(wǎng)——每日最新資訊28at.com

<dependencyManagement>      <dependencies>            <dependency>              <groupId>com.jianzh5</groupId>              <artifactId>dailymart-dependencies</artifactId>              <version>${revision}</version>              <type>pom</type>              <scope>import</scope>          </dependency>      </dependencies> </dependencyManagement><dependencies> <dependency>        <groupId>com.google.guava</groupId>        <artifactId>guava</artifactId>      </dependency></dependencies>

公共組件升級

當(dāng)項(xiàng)目中有多個(gè)公共組件時(shí)會出現(xiàn)這樣一個(gè)問題,每個(gè)公共組件定義的版本可能不一樣。比如dailymart-common-spring-boot-starter的版本是1.0.0,dailymart-cache-spring-boot-starter的版本是1.0.1,這樣就導(dǎo)致項(xiàng)目的依賴管理變得比較混亂。Jvu28資訊網(wǎng)——每日最新資訊28at.com

推薦的解決辦法是使用 revision 占位符統(tǒng)一管理基礎(chǔ)組件版本。Jvu28資訊網(wǎng)——每日最新資訊28at.com

1、在pom文件中定義屬性Jvu28資訊網(wǎng)——每日最新資訊28at.com

<properties>      <revision>2024.0.0-SNAPSHOT</revision></properties>

2、定義組件時(shí)直接使用revision變量作為版本號Jvu28資訊網(wǎng)——每日最新資訊28at.com

<parent>      <groupId>com.jianzh5</groupId>      <artifactId>dailymart-boot</artifactId>      <version>${revision}</version>  </parent>    <artifactId>dailymart-starter</artifactId>

3、在bom文件中通過revision占位符引入公共組件Jvu28資訊網(wǎng)——每日最新資訊28at.com

<dependencyManagement>    <dependencies>   <!-- Internal dependencies Start-->   <dependency>    <groupId>com.jianzh5</groupId>    <artifactId>dailymart-common-spring-boot-starter</artifactId>    <version>${revision}</version>   </dependency>  <dependency>       <groupId>com.jianzh5</groupId>       <artifactId>dailymart-ddd-spring-boot-starter</artifactId>       <version>${revision}</version>   </dependency>  </dependencies>  </dependencyManagement>

這樣,若公共組件需要修改版本,只需修改 revision 變量的值,各組件版本就會統(tǒng)一變更,非常方便。Jvu28資訊網(wǎng)——每日最新資訊28at.com

不過使用這種方式在公共組件模塊執(zhí)行 maven install 或 maven deploy 時(shí)會出現(xiàn)問題,推送到maven倉庫中的pom文件仍然使用 revision 變量,業(yè)務(wù)模塊無法直接引用。Jvu28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)我們需要借助Maven插件 flatten-maven-plugin,使其在 install 或 deploy 時(shí)自動將 revision 替換成具體的版本號。Jvu28資訊網(wǎng)——每日最新資訊28at.com

<build>      <plugins>          <plugin>              <groupId>org.codehaus.mojo</groupId>              <artifactId>flatten-maven-plugin</artifactId>              <version>${maven-flatten.version}</version>              <configuration>                  <updatePomFile>true</updatePomFile>                  <flattenMode>resolveCiFriendliesOnly</flattenMode>              </configuration>              <executions>                  <execution>                      <id>flatten</id>                      <goals>                          <goal>flatten</goal>                      </goals>                      <phase>process-resources</phase>                  </execution>                  <execution>                      <id>flatten.clean</id>                      <goals>                          <goal>clean</goal>                      </goals>                      <phase>clean</phase>                  </execution>              </executions>          </plugin>      </plugins>  </build>

在pom文件添加此插件后,執(zhí)行 install 時(shí)會生成一個(gè)名為 .flattened-pom.xml 的文件,打開文件后可以看到 revision 變量已經(jīng)全部替換成了具體的版本號。Jvu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Jvu28資訊網(wǎng)——每日最新資訊28at.com

Maven版本的選擇

在將自定義組件推送到maven倉庫時(shí),可以選擇兩種不同版本:Release版本和Snapshot版本。這兩者應(yīng)該如何選擇呢?Jvu28資訊網(wǎng)——每日最新資訊28at.com

兩者區(qū)別的區(qū)別如下:Jvu28資訊網(wǎng)——每日最新資訊28at.com

  • 如果是Snapshot版本,在mvn deploy時(shí)會自動發(fā)布到快照版本庫中。引入使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時(shí),Maven會自動從倉庫下載最新的快照版本。
  • 如果是Release版本,那么在mvn deploy時(shí)會自動發(fā)布到正式版本庫中。引入正式版本的模塊,在不更改版本號的情況下,編譯打包時(shí),如果本地已經(jīng)存在該版本的模塊則不會主動去鏡像服務(wù)器上下載。

簡而言之:Release版本是正式版,有bug不能再繼續(xù)使用這個(gè)版本號,需要配合開發(fā)方修改版本號;Snapshot版本是快照版,有bug可以繼續(xù)使用同一版本號,可以自動升級。Jvu28資訊網(wǎng)——每日最新資訊28at.com

如果是內(nèi)部開發(fā)項(xiàng)目,推薦使用Snapshot版本,即定義組件時(shí)在版本號后面加上 -SNAPSHOP 標(biāo)識符,這樣搭配上DevOps會非常方便;如果是需要對外發(fā)布的組件,還是需要使用Release版本發(fā)布。Jvu28資訊網(wǎng)——每日最新資訊28at.com

小結(jié)

本文介紹了在多人團(tuán)隊(duì)協(xié)作中更有效地組織代碼和進(jìn)行版本控制的方法,希望對你有所幫助!Jvu28資訊網(wǎng)——每日最新資訊28at.com

  1. 代碼倉庫優(yōu)化: 建議按業(yè)務(wù)模塊分離代碼至獨(dú)立倉庫,提高開發(fā)效率。
  2. 組件版本統(tǒng)一管理: 引入BOM,通過 revision 占位符簡化組件版本管理。
  3. 公共組件版本升級: 推薦使用 revision 占位符集中管理基礎(chǔ)組件版本,借助 flatten-maven-plugin 解決版本問題。
  4. Maven版本選擇: 內(nèi)部項(xiàng)目使用Snapshot版本,外部發(fā)布使用Release版本,確保靈活性和穩(wěn)定性。

本文鏈接:http://www.www897cc.com/showinfo-26-54974-0.html多人多團(tuán)隊(duì)?wèi)?yīng)該如何實(shí)施微服務(wù)?版本如何管理?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Qs 和 Querystring:解析和格式化 URL query 字符串的工具庫

下一篇: Koin輕量級依賴注入框架,輕松集成到Android應(yīng)用開發(fā)中

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 把LangChain跑起來的三個(gè)方法

    使用LangChain開發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個(gè)小小的重要功能可以大大改善您網(wǎng)站的用戶體驗(yàn)
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問題,分析了造成訓(xùn)練穩(wěn)定性存在問題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財(cái)經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報(bào)道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強(qiáng)迫服裝廠商與之簽訂獨(dú)家
  • iQOO Neo8系列今日官宣:首發(fā)天璣9200+ 全球安卓最強(qiáng)芯!

    在昨日舉行的的聯(lián)發(fā)科新一代旗艦芯片天璣9200+的發(fā)布會上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品將全球首發(fā)搭載這款當(dāng)前性能最強(qiáng)大的移動平臺
  • 由于成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將明顯上漲

    根據(jù)知情人士透露,由于材料、物流等成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將在2021年下半年有明顯上漲。進(jìn)入6月下旬以來,全球半導(dǎo)體芯片缺貨情況加劇,顯卡、處理器
  • 三翼鳥智能家居亮相電博會,讓用戶體驗(yàn)更真實(shí)

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現(xiàn)場,成為了展會的一大看點(diǎn)。這也是三翼鳥繼9月9日發(fā)布了行業(yè)首個(gè)一站式定制智慧家平臺后的
Top 主站蜘蛛池模板: 双峰县| 东海县| 高淳县| 碌曲县| 吴堡县| 佛冈县| 集贤县| 永川市| 宣城市| 关岭| 分宜县| 五峰| 襄垣县| 珠海市| 晋宁县| 五台县| 凭祥市| 南川市| 五指山市| 丹凤县| 富川| 丽江市| 清原| 南郑县| 天水市| 曲水县| 定西市| 临沂市| 肥东县| 墨江| 天柱县| 万盛区| 武安市| 玉溪市| 睢宁县| 专栏| 钟山县| 那曲县| 信丰县| 绵阳市| 台南市|