使用元件化加速共同作業和敏捷式開發
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
您的產品成功,您的組織正在成長,而且是時候相應增加您的程式代碼基底,以符合此成功。 當您在單一產品的單一程式代碼基底中相應放大過去 2-3 個小組時,您可能會發現自己提出如下的問題:
我的小組如何有效率地共用可重複使用的元件?
如何? 可讓功能小組在不逐步執行其他小組的工作的情況下快速逐一查看?
如何? 讓我的小組能夠自主權,以適合他們的步調來反覆運算?
任何階段的 Teams 都可以受益於考慮這些問題。 如果您是具有舊版程式代碼基底的已建立小組,您可能會詢問這些問題,因為系統要求您提供比以往更快的價值。 無論您的情況為何,元件化都可以協助您建置程式代碼基底,以調整為小組的大小,以及現今的開發速度。
在本文中,我們會探索透過 Azure Artifacts 的二進位組合如何協助您管理和共用外部相依性、開放原始碼軟體,以及隔離的共用元件。
元件和組合
元件化是將產品分割並組織成不同元件的程式。 大部分的 .NET 專案在方案內的專案形式上已經有一些元件的概念。 例如,基本網站可能包含前端元件、數據存取元件和模型/資料儲存元件。
來源組合
隨著您的產品成長,解決方案和專案模型可能會變得沒有效率。 整合需要較長的時間,而且更難合併、組建變慢,元件會開始從單一專案成長到多個專案。 一般而言,這是小組開始將這些相關專案集合分成個別解決方案的點。
一旦您超越單一解決方案,您如何元件化就會成為一個有趣的問題。 我們從來源組合開始,其中每個元件都是透過Visual Studio中的專案參考來參考。 只要您的來源位於單一組合界限中,就可以使用來源組合:單一來源存放庫中的單一解決方案。
不幸的是,當涉及多個解決方案時,這些專案參考會開始細分。 此時,當解決方案 A 相依於解決方案 B 時,它必須參考解決方案 B 所產生的建置二進位檔(例如 DLL)-這是 二進位組合。
因此,這些二進位檔現在必須建置並提供給解決方案 A,才能成功建置。 有幾種方式可以執行:
您可以將它們簽入原始檔控制。 視原始檔控制系統而定,二進位檔可以快速地將存放庫的大小擴大,使簽出時間和一般存放庫效能變慢。 如果您開始在分支中工作,則多個小組最終可以在不同版本引進相同的二進位檔,而導致具有挑戰性的合併衝突。
或者,您可以將它們裝載在檔案共用上,雖然這種方法具有某些限制。 檔案共用缺少快速查閱的索引,而且它們不會在未來提供保護,無法覆寫版本。
套件組合
套件可解決參考二進位檔的許多挑戰。 您可以讓解決方案 B 產生其二進位檔做為 NuGet 套件,而不是將它們簽入來源,而讓另一個解決方案 A 可以取用。 如果解決方案 A 和解決方案 B 維持為個別元件,其中 A 和 B 之間的同時變更很少見,則套件組合是管理 B 上 A 相依性的絕佳方式。套件組合可讓 B 自行反覆運算,而 A 可在 A 的排程允許時從 B 取得更新, 而且它可讓多個小組反覆運算和更新解決方案 B,而不會影響解決方案 A (或其他解決方案 C 或 D)。
不過,套件組合確實隨附於自己的一組挑戰。 到目前為止,我們已經檢查了一個直接的範例。 將套件組合調整為大型程式碼基底的大小(例如 Windows 或 Bing)可能會導致一系列挑戰:
瞭解相依性圖形中元件低的重大變更影響會變得非常具有挑戰性。
鑽石相依性 可能會成為靈活度的重要障礙。 在菱形相依性中,元件 B 和 C 都相依於共用元件 A,而元件 D 則相依於 B 和 C。當元件 A 引進具有重大變更的新版本時,如果 B 更新至新版本,但 C 則 D 無法接受 B 的更新,而不會引入相依性衝突。 在此簡單範例中,與 C 的交談可能是解決衝突所需的所有專案。 不過,在複雜的圖表中,鑽石很快就會變得無法解決。
當修改需要套用至使用套件撰寫的兩個元件時,開發人員的反覆項目週期會變得相當慢。 如果元件 A 已更新,就必須重建、重新封裝及重新發佈它。 接著,元件 B 必須更新為最近發佈的版本,以驗證元件 A 中所做的變更。採用來源組合,允許同時建置元件 A 和 B,一致地為開發人員提供更快速的反覆項目週期。
您應該使用的內容
一般而言,我們看到大型團隊在使用組合策略的混合時最成功。 為了協助判斷程式代碼基底的正確功能,請從對應產品的相依性圖形開始,並開始將您的元件分組成一組相關元件。
例如,您可能會有構成架構的元件集合,以及構成使用者面向服務的另一元件。 然後,針對每個相關元件群組,詢問下列問題:
我可以預期我為小組建立的集合中的經常簽入嗎?
單一小組是否負責整個集合?
對於單一集合,是否有共用發行步調?
在我們的體驗中,我們發現使用 來源組合 對單一小組或一組相關小組處理的相關項目最為有效。 相反地, 二進位組合 對開放原始碼軟體、外部相依性(來自遠方或隔離小組的元件)和獨立的共用元件具有優勢。