總結ddd 的知識體系提出了很多的名詞,像:領域、子域、核心域、通用域、支撐域、限界上下文、聚合、聚合根、實體、值物件等等,非常多。這些名詞,都是關鍵概念,所以在這篇文章中重點了解 領域、子域、核心域、通用域和支撐域等重要概念。以及怎麼劃分領域?
ddd 的領域就是這個邊界內要解決的業務問題域(也符合特定的語義)。
既然領域是用來限定業務邊界和範圍的,那麼就會有大小之分,領域越大,業務範圍就越大,反之則相反。如果乙個領域過大,還可以把領域可以進一步劃分為子領域。劃分出來的多個子領域稱為子域,每個子域對應乙個更小的問題域或更小的業務範圍。
ddd 的研究方法與自然科學的研究方法類似。當人們在自然科學研究中遇到複雜問題時,通常的做法就是將問題一步一步地細分,再針對細分出來的問題域,逐個深入研究,探索和建立所有子域的知識體系。當所有問題子域完成研究時,我們就建立了全部領域的完整知識體系了。
以植物研究時領域的細分為例:
第一步:確定研究物件,即研究領域,這裡是一棵桃樹。
第二步:對研究物件進行細分,將桃樹細分為器官,器官又分為營養器官和***官兩種。其中營養器官包括根、莖和葉,***官包括花、果實和種子。桃樹的知識體系是我們已經確定要研究的問題域,對應 ddd 的領域。根、莖、葉、花、果實和種子等器官則是細分後的問題子域。這個過程就是 ddd 將領域細分為多個子域的過程。
第三步:對器官進行細分,將器官細分為組織。比如,葉子器官可細分為保護組織、營養組織和輸導組織等。這個過程就是 ddd 將子域進一步細分為多個子域的過程。
第四步:對組織進行細分,將組織細分為細胞,細胞成為我們研究的最小單元。細胞之間的細胞壁確定了單元的邊界,也確定了研究的最小邊界。
每乙個細分的領域都會有乙個知識體系,也就是 ddd 的領域模型。在所有子域的研究完成後,我們就建立了全域的知識體系了,也就建立了全域的領域模型。
在領域不斷劃分的過程中,領域會細分為不同的子域,子域可以根據自身重要性和功能屬性劃分為三類子域,它們分別是:核心域、通用域和支撐域。
核心域:它是業務成功的主要因素和公司的核心競爭力。
通用域:沒有太多個性化的訴求,同時被多個子域使用的通用功能子域
支撐域:支撐其他領域業務,具有企業特性,但不具有通用性。
以桃樹為例:
不同的人對桃樹的理解是不同的。如果這棵桃樹生長在公園裡,在園丁的眼裡,他喜歡的是「人面桃花相映紅」的陽春三月,這時花就是桃樹的核心域。但如果這棵桃樹生長在果園裡,對果農來說,他則是希望在豐收的季節收穫碩果累累的桃子,這時果實就是桃樹的核心域。
在不同的場景下,不同的人對桃樹核心域的理解是不同的,因此對桃樹的處理方式也會不一樣。園丁更關注桃樹花期的營養,而果農則更關注桃樹落果期的營養,有時為了保證果實的營養供給,還會裁剪掉瘋長的莖和葉(通用域或支撐域)。
同樣的道理,商業模式的不同會導致核心域劃分結果的不同。有的公司核心域可能在客戶服務,有的可能在產品質量,有的可能在物流。在公司領域細分、建立領域模型和系統建設時,我們就要結合公司戰略重點和商業模式,找到核心域了,且重點關注核心域。
領域的核心思想就是將問題域逐級細分,來降低業務理解和系統實現的複雜度。通過領域細分,逐步縮小微服務需要解決的問題域,構建合適的領域模型,而領域模型對映成系統就是微服務了。
核心域、支撐域和通用域的主要目標是:通過領域劃分,區分不同子域在公司內的不同功能屬性和重要性,從而公司可對不同子域採取不同的資源投入和建設策略,其關注度也會不一樣。
子域和父域的問題
我安裝了乙個父域控為dc1.exchtest.com,dns伺服器在也在這台伺服器上,然後建了乙個子域為sales.exchtest.com,dns伺服器在子域的域控制器上 conto.sales.exchtest.com,然後分別在父域控和子域控的dns伺服器上新增對方區域為其輔助dns區域,現在...
戲說領域驅動設計(五) 子域
細心的您可能已經發現了乙個規律,ddd使用了一種由上至下的方式來指導系統的構建。第一層考慮如何把大的領域劃成多個小的子域,重要性不一樣,投入的人和錢肯定也不一樣 第二層考慮系統的架構方面,仍然是一類巨集觀的工作,不過其更加聚焦於如何把大的系統分成幾個物理子系統及子系統間的互動方式 如果非微服務架構,...
DDD之領域,子域,限界上下文
從廣義上來講,領域即是乙個組織所做的事情以及其中所包含的一切。一般來講商業機構會確定乙個市場,然後在這個市場中銷售產品和服務。每個組織都有它自己的業務範圍和做事方式,這個業務範圍以及在其中所進行的活動就是領域。由於領域的概念通常都過大,所以我們一般都會將其進行拆分,諸如核心域,通用域,支援域。一般來...