摘要:翻譯自有整理你問的限界上下文是什么特定模型的分隔適用性。限界上下文意味著責任是通過明確的邊界來強制執行的舉個例子過程約翰,公司的開發人員。每個組也是有限的上下文。
翻譯自DDD - The Bounded Context Explained,有整理你問的限界上下文(BC)是什么?
“特定模型的分隔適用性。限界上下文使團隊成員能夠清楚地分享對必須一致的內容以及可以獨立開發的內容。”
看定義看懂了嗎?BC是最難解釋的DDD原則之一,但它可能是最重要的,因為沒有BC就不能做DDD。因此,您必須了解如何在實際獲取根聚合,聚合,實體和值對象之前識別BC。
讓我們再試一次:上下文意味著具體的責任。限界上下文意味著責任是通過明確的邊界來強制執行的
舉個例子 過程約翰,X公司的開發人員。約翰在IT部門工作
麗塔,她是同一家公司的會計師。麗塔在會計部門工作
此時,IT部門是一個限界上下文,會計部門是另一個限界上下文
IT部門有責任處理公司中與IT相關的所有事務,而會計部門處理與會計相關的所有事務
約翰不會進入麗塔的辦公室并修改工資單,而麗塔也不會去約翰的辦公室并修改他的代碼。
雖然他們可以這么做,但這將是一個丑聞。因為如果他們這樣做,他們將超越他們的界限。
如果麗塔在會計軟件(內部開發)中發現錯誤,她會致電IT部門處理。她不會啟動Visual Studio并開始搞亂代碼。這既不是她的責任同時她也不需要知道怎么做,即使她知道VS是約翰用來編寫代碼的程序(事實上,VS在會計師的計算機上將是一個非常奇怪的軟件)
同樣明智的是,工資單文件或發票在IT部門中是沒有位置的。
當然,當約翰遇到涉及工資單的問題時,他要求麗塔調查一下。
兩者都尊重彼此的界限,并根據自己的責任行事。
但IT部門本身分為兩組:軟件開發組和管理組。第一組實現功能并修復錯誤。第二組處理服務器。每個組也是有限的上下文。他們有自己的責任和明確的界限。 DBA不編寫C#代碼,約翰不會破壞服務器配置。每個人都按照自己的責任行事并在自己的范圍內行事。
兩者都有非常精確的責任,他們的界限非常明確。
小結所以,IT部門是BC。約翰是其模型的一部分。
事實上,所有有意義的東西(開發人員,服務器等)都是BC的一部分,它應該在內部保持一致(開發人員應該編寫軟件而不是詢問發票)。
這意味著麗塔在IT方面沒有地位,她不應該處理與IT相關的任何事情。
麗塔是會計BC的一部分。她可能正在訪問IT辦公室,但她只是一個匆匆過客,她對該部門毫無意義,沒有人希望她編寫代碼或充當開發人員。約翰可能喜歡麗塔,并花了一些時間在她的辦公室,但這并不能使約翰成為一名會計師。
我們可以看到,在一定程度上,BC是自治的,它們不重疊。此外,如果來自一個BC(X)的對象轉到其他BC(Y),它并不意味著它現在是后者的一部分,它僅被視為一個對Y沒有意義的簡單對象。所以它們幾乎是獨立的,那么他們如何一起工作?
不同BC之間該如何合作 例子說明登場新人物 -> 安德魯(IT部門經理)
按照例子來說,當會計部門必須和IT部門合作的時候該如何做?
他們通過與合適的人交談來做到這一點。
當麗塔需要一個新的軟件功能時,她可以告訴約翰,但約翰的經理(安德魯)最終決定是否添加,以及將添加哪些功能。
當你想要新功能甚至修復一些錯誤時,是需要與安德魯交流的。安德魯是IT經理,他告訴約翰(或IT的其他任何人)下一步該做什么。
麗塔不能忽視安德魯,因為這是IT部門的規則:安德魯做決定。你必須按照安德魯想要的方式提出你的想法,否則他們會被拒絕。當要求對IT不符合方式且沒有意義的時候,要求會自動被拒絕。
安德魯是IT BC的反腐敗層,沒有什么決定能夠跳過他,它適合于IT部門的內部組織。
類比到代碼這些例子很簡單,但我們的代碼呢?我們確實希望我們的BC能夠解耦,所以BC1不應該知道BC2。好吧,這個想法是一個BC不應該知道其他BC的內部,這兩個可以使用公共對象(DTO)直接將消息傳遞給另一個或者是專門的適配器,它知道如何與兩個BC通信。雖然通過域事件(基本上是更高級別使用的觀察者模式)的首選方法。
結束語哇,很長的帖子,但我希望你現在對一個有限的背景有一個非常明確的理解。以下是常見有界上下文的一些示例:應用程序本身,UI層,域層以及它們的最小BC:對象,任何對象。
參考DDD - The Bounded Context Explained
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28078.html
摘要:將領域中所發生的活動建模成一系列離散事件。領域事件是領域模型的組成部分,表示領域中所發生的事情。創建領域事件事件命名在建模領域事件時,我們應該根據限界上下文中的通用語言來命名事件。 使用領域事件來捕獲發生在領域中的一些事情。 領域驅動實踐者發現他們可以通過了解更多發生在問題域中的事件,來更好的理解問題域。這些事件,就是領域事件,主要是與領域專家一起進行知識提煉環節中獲得。 領域事件,可...
摘要:代碼實現見下面評論對應代碼動態規劃基本思想和分治法基本思想有共同的地方,不同的是子問題往往不是獨立的,有事母問題要借助子問題的解來判斷,因此把已經計算好的問題記錄在表格中,后續如果需要查詢一下,可以避免重復計算,這是動態規劃的基本思想。 作者:心葉時間:2018-05-01 19:28 本文對應github地址:https://github.com/yelloxing/... 以上實現...
摘要:而微服務將這個理念應用在獨立的服務上。微服務對比與原來的單體應用,有它的優勢,如服務的自治性增強但同時也會帶來一些其他問題,如性能復雜度等問題。想要使用微服務,首先是要清楚哪些業務或者功能應該成為單獨的服務。其次,考慮業務極有可能的變化。 1、在學習軟件構造、設計相關知識時,大家應該有學習到內聚性的概念:即把因相同原因而變化的東西聚合到一起,而把因不同原因而變化的東西分離開來。而 微服...
摘要:本文總結了前端老司機經常問題的一些問題并結合個人總結給出了比較詳盡的答案。網易阿里騰訊校招社招必備知識點。此外還有網絡線程,定時器任務線程,文件系統處理線程等等。線程核心是引擎。主線程和工作線程之間的通知機制叫做事件循環。 showImg(https://segmentfault.com/img/bVbu4aB?w=300&h=208); 本文總結了前端老司機經常問題的一些問題并結合個...
閱讀 2105·2021-11-23 10:06
閱讀 3456·2021-11-11 16:54
閱讀 3336·2019-08-29 17:31
閱讀 3563·2019-08-29 17:05
閱讀 2166·2019-08-26 13:36
閱讀 2155·2019-08-26 12:17
閱讀 520·2019-08-26 12:12
閱讀 1668·2019-08-26 10:19