如何權衡設計可擴充套件的有界上下文? (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套件
- 如何為可擴充套件系統進行Java Socket程式設計套件Java程式設計
- 可擴充套件性套件
- 可動態擴充套件的資料庫模型設計套件資料庫模型
- dubbo是如何實現可擴充套件的?套件
- SQL Story摘錄(三)————可擴充套件設計 (轉)SQL套件
- dubbo是如何實現可擴充套件的?(二)套件
- 擴充套件的持久化上下文問題套件持久化
- 可擴充套件的搜尋元件套件元件
- WPF如何封裝一個可擴充套件的Window封裝套件
- [許可權擴充套件] Entrust 快取問題套件Rust快取
- 編寫可擴充套件程式套件
- 如何擴充套件大模型的上下文長度|得物技術套件大模型
- 如何在高度可擴充套件的系統中管理後設資料套件
- 實現近乎無限可擴充套件性的7種設計模式套件設計模式
- 架構設計的立方體擴充套件架構套件
- Laravel-permission(一個許可權管理的擴充套件包) 的使用Laravel套件
- 如何構建可控,可靠,可擴充套件的 PWA 應用套件
- [WCF許可權控制]透過擴充套件自行實現服務授權套件
- 使用擴充套件SRAM設計的存內計算套件
- 可擴充套件性筆記一套件筆記
- 重構 - 設計API的擴充套件機制API套件
- ETL的可擴充套件性和可維護性套件
- 深入NGINX:我們如何設計它的效能和擴充套件性Nginx套件
- 如何設計高擴充套件的線上網頁製作平臺套件網頁
- 實用的可選項(Optional)擴充套件套件
- 聊聊如何讓你的業務程式碼具有可擴充套件性套件
- 如何開始一個模組化可擴充套件的Web App套件WebAPP
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- ReactiveUI是.NET的Reactive程式設計擴充套件框架ReactUI程式設計套件框架
- Yahoo!Screwdriver:可擴充套件的持續整合工具套件
- 構建可擴充套件的有態服務套件