【DDD】領域驅動設計中的子域、核心域、通用域、支撐域

引言

​         對於我們認識一件事情來說,如果想要快速的學習,搞懂其內部核心思想,統一語言是一件很重要的事情。比如我們做敏捷開發,我們應該知道敏捷看板是什麼東西,scrum master是什麼角色,比如我們做C4Model,我們要知道什麼叫做系統上下文,什麼叫容器 ,知道了這些領域名詞能夠更好地讓我們去學習,去深入理解。

重點詞彙

  • 領域
  • 子域
  • 核心域
  • 通用域
  • 支撐域

        我們看到了,這幾個詞彙都帶有域字,猛地一看,很容易被搞蒙,我們逐一來進行分析,本篇文章就是要和大家一起把這幾個詞彙搞懂。

領域

        wiki解釋: 指某一專業或事物方面範圍的涵蓋

        所以我們能夠知道很重要的一點,領域是有範圍的,我們能夠根據領域範圍的不同來定義界限,定義邊界

        在研究和解決具體業務問題時,DDD會按照⼀定的規則將業務領域進行細分,當領域細分到⼀定的程度後,DDD
會將問題範圍限定在特定的邊界內,在這個邊界內建⽴領域模型,進而用代碼實現該領域模型,解決相應的
業務問題。簡言之,DDD的領域就是這個邊界內要解決的業務問題域。
        既然領域是用來限定業務邊界和範圍的,那麼就會有大小之分,領域越大,業務範圍就越大,反之則相反。

子域

        我們舉個例子,比如我們要研究的領域是轎車,首先我們先確定了,領域爲轎車,如下圖所示

簡單的轎車拆分圖

        對於研究的領域來說,可能我們需要把一個大的整體區分拆開來理解它,從整體到部分的過程,也是我們在深度學習的過程,比如我們拆分 發動機、離合器、變速箱、車輪、氣囊、內飾,這些是轎車的子域,一個領域是由一個或者多個子域構成的,有些子域還可以再進行拆分,也就是子子域,含義爲子域的子域。

        具體再向下拆的過程中我們能夠根據功能不同,進行細分,比如發動曲柄欄杆機構和配氣機構等,這些組成了發動機,如果我們把發動機理解爲領域對象的話,這些發動曲柄欄杆機構和配氣機構等可以理解爲領域內的聚合、實體、值對象等,要根據不同的業務場景進行對應的判斷。

        其實如果我們繼續拆分配氣機構,其實還可以拆分成 氣門組、氣門傳動組,一直可以拆分到 進氣門、排氣門、氣門導管、氣門座及氣門彈簧等零件,直到不能拆分,那麼這些零件就對應着聚合根、實體、值對象。

        我們發現,我兩次描述的,找到的聚合根、實體、值對象是不一樣的,所以確定好上下文,確定好業務場景是重中之中,不能說明哪個是對的哪個是錯的,只能說明在這個場景下,拆分到這個力度是最合適的。

        當然,具體介紹聚合根、實體、值對象是下一篇文章做得事情,先劇透一下。

爲什麼要給子域打標

        其實對於我們來說,子域,子子域,子子子域,可以一直拆到不能拆爲止,這些拆分出來的結構,對於整體來說都是子域,但是,作爲一家公司,業務一定有輕重緩急,認識到哪些業務線重要,哪些業務線比較清緩,有的時候能決定公司的整體效率甚至生死存亡。所以做業務一定要有的放矢。

        核心域、支撐域和通用域的主要目標是:通過領域劃分,區分不同子域在公司內的不同功能屬性和重要性,從而公司可對不同子域採取不同的資源投入和建設策略,其關注度也會不一樣。

核心域

        核心域,指的是這個業務的核心功能,核心模塊。比如,轎車主打的是動力充沛的話,那麼發動機一定是核心域,比如說主打的是操控的話,那麼變速箱、離合器一定是核心域。

        所以同一產品,在不同的商業角度中,核心重點,核心玩法是不一樣的,比如對於電商來說,阿里和京東都是頭部企業,那麼阿里主要做的是聯營模式,這種場景下,返利、租戶等系統一定是核心,京東做的是自營模式,那麼倉儲、wms、供應鏈一定是核心域。

通用域

        對於汽車來說我們可以把內飾理解爲通用域,因爲比如說坐墊,比如說化妝鏡,這些東西不一定是隻能給某一輛單獨型號的車來使用的,所以具有一些通用的屬性。沒有太多客製化的開發工作。

        對於系統來說的話,通用域則是你需要用到的通用系統,比如認證、權限等等,這類應用很容易買到,沒有企業特點限制,不需要做太多的定製化。

支撐域

        以汽車爲例,我們可以把車輪和氣囊作爲支撐域來看待,因爲對於車輪和氣囊來說,它們的大小尺寸是嚴格和車輛保持一致的,也就是說不具備通用性,是極具有車廠風采的個性化產品

        對於DDD來說,支撐域則具有企業特性,但不具有通用性,例如數據代碼類的數據字典等系統。

下一篇文章講下聚合根、實體和值對象

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章