成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發(fā)者該用單一代碼庫還是多代碼庫管理代碼?

譯文
開發(fā) 架構(gòu)
代碼庫就像其使用者,多種多樣、特色鮮明、各有趣味。但是,幾乎所有代碼庫都有一個(gè)共同點(diǎn):代碼庫會逐漸變大。隨著時(shí)間的推移,團(tuán)隊(duì)壯大,需求增長,最終結(jié)果是更多的開發(fā)人員編寫更多的代碼處理更多的任務(wù)。雖然刪除大段代碼不乏樂趣,但終究難擋代碼庫整體變大的步伐。

如果你負(fù)責(zé)組織的代碼庫架構(gòu),那么如何以可擴(kuò)展的方式管理這種增長,這個(gè)問題早晚要應(yīng)對。有兩種常見的架構(gòu)方案可供選擇:

一種是“多代碼庫”架構(gòu),我們將代碼庫分成越來越多的小代碼庫,以小團(tuán)隊(duì)或項(xiàng)目為邊界。另一種是“單一代碼庫”,即維護(hù)一個(gè)不斷變大的大型代碼庫,內(nèi)含許多項(xiàng)目和庫的代碼,多個(gè)團(tuán)隊(duì)圍繞該代碼庫進(jìn)行協(xié)作。

多代碼庫方案看起來容易實(shí)現(xiàn),最初可能很誘人,我們只要在需要時(shí)創(chuàng)建更多的代碼庫就好了!我們幾乎不需要任何特殊工具,且可以讓每個(gè)團(tuán)隊(duì)在管理代碼方面擁有更大的自主權(quán)。

遺憾的是,實(shí)際上,多代碼庫架構(gòu)常常導(dǎo)致代碼庫脆弱、不一致且難以更改。這進(jìn)而助長了工程部門本身的孤島現(xiàn)象。相比之下,單一代碼庫方案反而是一種更好、更靈活、更具協(xié)作性的長期擴(kuò)展解決方案。

為什么會這樣?代碼庫架構(gòu)中的難點(diǎn)涉及在有依賴項(xiàng)的情況下管理代碼更改,反之亦然。而在多代碼庫架構(gòu)中,代碼庫通過已發(fā)布的版本化工件(artifact),使用來自其他代碼庫的代碼;這樣一來,更改傳遞愈發(fā)困難。

具體來說,當(dāng)我們作為代碼庫A的所有者需要對所使用的代碼庫B進(jìn)行一些更改時(shí),會發(fā)生什么?首先,我們得找到代碼庫B的看門人,說服他們接受并發(fā)布新版本的更改。然后,在理想情況下,有人會找到代碼庫B的所有其他使用者,將它們升級到這個(gè)新版本,然后重新發(fā)布。現(xiàn)在我們必須找到那些初始使用者的使用者,升級并針對新版本重新發(fā)布等等,循環(huán)往復(fù),不厭其煩。

但誰來做所有這些工作?他們將如何找到所有這些使用者?畢竟,依賴項(xiàng)元數(shù)據(jù)駐留在使用者端,而不是被使用者端,沒有簡單的方法來回溯依賴項(xiàng)。當(dāng)一個(gè)問題的歸屬并不直接、解決方案又不明顯時(shí),往往會被忽略,因此實(shí)際上不會出現(xiàn)回溯工作。

短時(shí)間內(nèi)可能沒什么關(guān)系,因?yàn)槠渌a庫固定到了早期版本的依賴項(xiàng)。但這種舒適狀態(tài)很難長久,因?yàn)檫t早有些使用者會被集成到一個(gè)可部署的工件中,到時(shí)就不得不有人為該工件選擇單一版本的依賴項(xiàng)。因此,我們最終會遇到由一個(gè)過去的團(tuán)隊(duì)引起的傳遞版本沖突,它就像埋入代碼庫的定時(shí)炸彈,如果另外某個(gè)團(tuán)隊(duì)需要將代碼集成到生產(chǎn)環(huán)境中,它會引爆炸毀。

如果這個(gè)問題很眼熟,那是由于它是臭名昭著的“依賴地獄”(dependency hell)問題的內(nèi)部版本,該問題通常困擾著代碼庫的外部依賴項(xiàng)。在多代碼庫架構(gòu)中,第一方依賴項(xiàng)技術(shù)上來說被視為第三方依賴項(xiàng),即使它們碰巧由同一家組織編寫和擁有。因此,如果是多代碼庫架構(gòu),我們基本上選擇了面臨大規(guī)模擴(kuò)展的依賴地獄。

單一代碼庫與之形成了對比:所有使用者都在同一源代碼樹中,因此找到它們就像使用grep一樣簡單。又由于沒有發(fā)布這一步,所有代碼共享一個(gè)版本(由當(dāng)前提交表示),因此以傳遞且同步地更新使用者流程上簡單直觀。如果我們的測試覆蓋率良好,就可以清楚地知道我們什么時(shí)候做對了。

當(dāng)然,“簡單直觀”與“容易”不一樣:同步升級代碼庫本身可能并非易事。但這就是代碼更改的本質(zhì)。沒有哪種代碼庫架構(gòu)可以消除工程問題中不能化簡的部分。但是單一代碼庫現(xiàn)在至少強(qiáng)制我們把必要的難題處理掉,也就不會在以后造成不必要的困難。

多代碼庫架構(gòu)在未來往往將依賴地獄外化到其他人身上,這是與康威定律(Conway’s Law)相關(guān)的一個(gè)更寬泛的問題:“任何設(shè)計(jì)系統(tǒng)的組織都會形成這樣一種設(shè)計(jì),其結(jié)構(gòu)與組織溝通結(jié)構(gòu)亦步亦趨”。反過來也大致如此:組織的結(jié)構(gòu)往往是這種溝通所圍繞架構(gòu)的副本。在這種情況下,分散的代碼庫架構(gòu)會促進(jìn)工程部門本身的分裂,代碼庫設(shè)計(jì)最終讓組織各自把關(guān)和職責(zé)分散,而不是齊心實(shí)現(xiàn)共同目標(biāo),因?yàn)檫@些共同目標(biāo)沒有在架構(gòu)上加以表示。單一代碼庫支持并能以溫和的方式實(shí)現(xiàn)組織統(tǒng)一:每個(gè)人都在單一代碼庫方面進(jìn)行協(xié)作,這正是組織成功構(gòu)建統(tǒng)一產(chǎn)品所需要的溝通渠道。

單一代碼庫并不是靈丹妙藥。它也確實(shí)需要合適的工具和流程來保持性能規(guī)模化和工程有效性。但借助合適的架構(gòu)和工具,你就可以確保代碼庫和組織各自有機(jī)統(tǒng)一,以規(guī)模化表現(xiàn)蒸蒸日上。

原文標(biāo)題:The monorepo approach to code management,作者:Benjy Weinberger

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2011-07-18 09:10:30

Linux 3.0微軟

2025-05-30 10:34:00

2023-12-30 16:30:29

開發(fā)者工具Vite

2020-06-05 14:48:11

零代碼低代碼開發(fā)

2019-11-20 09:25:03

Visual Stud編程語言

2024-09-09 00:01:00

騰訊開源代碼

2020-06-03 18:10:46

GitHub代碼庫前端

2011-04-01 15:09:18

Symbian諾基亞

2020-11-13 15:40:18

React前端Recoil

2020-10-09 11:50:10

ReactRecoil前端

2024-08-12 09:05:00

AI訓(xùn)練

2024-12-12 09:00:33

2021-05-07 05:38:02

微軟Edge瀏覽器

2019-01-08 09:55:45

GitHub代碼開發(fā)者

2025-05-21 14:20:50

2023-11-01 13:37:38

Golang代碼

2017-12-22 07:31:41

2010-01-22 09:09:00

Linux代碼開發(fā)

2014-03-13 11:08:42

結(jié)對編程代碼審查

2024-10-12 09:38:53

點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩电影免费观看中文字幕 | 中文字幕 亚洲一区 | 欧美一级在线视频 | 久久国产精品色av免费观看 | 欧美日韩在线一区二区三区 | 成人免费一区二区 | 久久国产欧美日韩精品 | 91大神在线资源观看无广告 | 欧美二区乱c黑人 | 亚洲国产精品一区 | 国产精品久久久久久 | 日韩一区二区在线观看 | 特黄视频 | 人人九九 | 中文字幕 国产精品 | 久久久影院 | 91大神在线看 | 久热精品视频 | 欧美性猛交一区二区三区精品 | 国内精品久久久久 | 日本一区精品 | 欧美久久久久久久 | 久久免费精品 | 久久久久久久久久久久久久国产 | 一级黄色毛片子 | 午夜精品久久久久久久久久久久久 | 成年免费大片黄在线观看一级 | 天天色官网 | 亚洲一区二区三区桃乃木香奈 | 亚洲欧美中文日韩在线v日本 | 一区二区三区欧美在线 | 九九九视频 | 久久不射电影网 | 亚洲一区成人 | 精品日韩一区二区 | 精品人伦一区二区三区蜜桃网站 | 中文精品视频 | 国产美女精品视频 | 丁香久久 | 国产在线观看网站 | 久久大陆 |