如何權衡設計可擴充套件的有界上下文? (mathiasverraes)

發表於2021-04-10

有界上下文字身大小與有界上下文之間整合介面是一種很複雜的權衡設計,本文指出了其中存在的矛盾和張力。

術語定義:

  • 有界上下文是“可理解性邊界”,即模型及其語言周圍的邊界。您可以孤立地理解模型和語言,而不必瞭解其他邊界上下文。
  • 介面是有界上下文之間的一組合同或訊息型別或API。它們從一種模型和語言轉換為另一種模型和語言。
  • 如果我們能夠對其進行頻繁,安全和廉價的更改,則有界上下文或介面是可以發展的。

在設計可擴充套件的有界上下文(BC)時,存在一些基本的權衡會影響我們的設計。

  1. 如果BC小且易於理解且介面較小,則它在內部是可演化的。
  2. 如果介面較小且易於理解,則BC系統是可演化的(新增,刪除,重新配置BC)。
  3. 1和2之間權衡的壓力在於:選擇許多小的BC意味著具有更大的介面,但是選擇許多小的介面意味著具有更大的BC。
  4. 如果介面整合的BC較少,則介面本身將更易於演化;如果整合更多的BC,則介面本身將難以演化。
  5. 2和4的結果是,小的可擴充套件介面使新增BC更容易,但在此過程中可擴充套件性降低。
  6. 與每個消費者的許多專用介面相比,BC提供一個通用的共享介面要容易得多。但是,當BC更改時,很難維護許多專用介面。
  7. 對於BC而言,使用適合該BC的專用介面更加容易。通用介面之所以膨脹,是因為它們支援其他使用者,因此需要進行更多的整合工作。
  8. 權衡6和7需要找到一小組半專業介面,這些介面在具有類似需求的某些消費者之間共享。
  9. 團隊之間的協調(實際上是理解,協調模型和語言的協調)非常昂貴,這是我們擁有BC的原因之一。
  10. 實現8.與單個通用介面或單個專用介面相比,需要在更多團隊之間進行更多的協調。

沒有解決方案或硬性規定來進行這些折衷。取而代之的是,您需要使用啟發式方法進行權衡,並使用啟發式方法來知道何時選擇與您最初進行的取捨不同的取捨。

 

相關文章