如何權衡設計可擴充套件的有界上下文? (mathiasverraes)
有界上下文字身大小與有界上下文之間整合介面是一種很複雜的權衡設計,本文指出了其中存在的矛盾和張力。
術語定義:
- 有界上下文是“可理解性邊界”,即模型及其語言周圍的邊界。您可以孤立地理解模型和語言,而不必瞭解其他邊界上下文。
- 介面是有界上下文之間的一組合同或訊息型別或API。它們從一種模型和語言轉換為另一種模型和語言。
- 如果我們能夠對其進行頻繁,安全和廉價的更改,則有界上下文或介面是可以發展的。
在設計可擴充套件的有界上下文(BC)時,存在一些基本的權衡會影響我們的設計。
- 如果BC小且易於理解且介面較小,則它在內部是可演化的。
- 如果介面較小且易於理解,則BC系統是可演化的(新增,刪除,重新配置BC)。
- 1和2之間權衡的壓力在於:選擇許多小的BC意味著具有更大的介面,但是選擇許多小的介面意味著具有更大的BC。
- 如果介面整合的BC較少,則介面本身將更易於演化;如果整合更多的BC,則介面本身將難以演化。
- 2和4的結果是,小的可擴充套件介面使新增BC更容易,但在此過程中可擴充套件性降低。
- 與每個消費者的許多專用介面相比,BC提供一個通用的共享介面要容易得多。但是,當BC更改時,很難維護許多專用介面。
- 對於BC而言,使用適合該BC的專用介面更加容易。通用介面之所以膨脹,是因為它們支援其他使用者,因此需要進行更多的整合工作。
- 權衡6和7需要找到一小組半專業介面,這些介面在具有類似需求的某些消費者之間共享。
- 團隊之間的協調(實際上是理解,協調模型和語言的協調)非常昂貴,這是我們擁有BC的原因之一。
- 實現8.與單個通用介面或單個專用介面相比,需要在更多團隊之間進行更多的協調。
沒有解決方案或硬性規定來進行這些折衷。取而代之的是,您需要使用啟發式方法進行權衡,並使用啟發式方法來知道何時選擇與您最初進行的取捨不同的取捨。
相關文章
- MySQL Sharding可擴充套件設計YMMySql套件
- 可擴充套件的使用者表設計套件
- MySQL 8.0:無鎖可擴充套件的 WAL 設計MySql套件
- Django內建許可權擴充套件案例Django套件
- 擴充套件.Django-許可權系統套件Django
- 可擴充套件性套件
- dubbo是如何實現可擴充套件的?套件
- dubbo是如何實現可擴充套件的?(二)套件
- WPF如何封裝一個可擴充套件的Window封裝套件
- 實現近乎無限可擴充套件性的7種設計模式套件設計模式
- 如何在高度可擴充套件的系統中管理後設資料套件
- 編寫可擴充套件程式套件
- 如何擴充套件大模型的上下文長度|得物技術套件大模型
- Laravel-permission(一個許可權管理的擴充套件包) 的使用Laravel套件
- 使用擴充套件SRAM設計的存內計算套件
- 如何構建可控,可靠,可擴充套件的 PWA 應用套件
- [WCF許可權控制]透過擴充套件自行實現服務授權套件
- 重構 - 設計API的擴充套件機制API套件
- 深入NGINX:我們如何設計它的效能和擴充套件性Nginx套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 實用的可選項(Optional)擴充套件套件
- 如何擴充套件Kubernetes API?套件API
- 如何劃分有界上下文? - nick
- 如何設計高擴充套件的線上網頁製作平臺套件網頁
- 聊聊如何讓你的業務程式碼具有可擴充套件性套件
- Lynx技術分析-JS引擎擴充套件設計JS套件
- 乾貨丨如何水平擴充套件和垂直擴充套件DolphinDB叢集?套件
- 讀構建可擴充套件分散式系統:方法與實踐15可擴充套件系統的基本要素套件分散式
- JavaScript權威指南(11)——JavaScript的子集和擴充套件JavaScript套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Rust 程式設計影片教程(進階)——019 sync 和 send trait 的可擴充套件併發Rust程式設計AI套件
- 基於中臺思想的物流系統設計(五):設計可擴充套件的產品服務平臺套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- 可擴充套件物件導向的canvas畫圖程式套件物件Canvas
- 簡要剖析:可擴充套件的微服務架構套件微服務架構
- 教你 4 步搭建彈性可擴充套件的 WebAPI套件WebAPI
- 谷歌的三大可擴充套件核心架構谷歌套件架構
- 讀構建可擴充套件分散式系統:方法與實踐09可擴充套件資料庫基礎套件分散式資料庫