名詞解釋
在DDD興起的原因以及與微服務的關係中曾舉了一個研究桃樹的例子,如果要研究桃樹,將桃樹根據器官分成根、莖、葉、花、果實、種子,這每一種器官都可以認為是一個研究領域,而領域又有更加具體的細分,分成子域、核心域、通用域、支撐域等,下面回顧桃樹這個例子
看上面這張圖 ,如果研究桃樹是我們的業務,那麼如何更加快速有效的研究桃樹呢? 根據回憶,初中課本是這樣研究的:
第一步: 確定研究的物件,即研究領域 ,這裡是一棵桃樹。
第二步: 根據研究物件的某些維度,對其進行進一步的拆分,例如拆分成器官,而器官又可以分成營養器官,生殖器官,其中營養器官包括根、莖、葉,生殖器官包括花、果實、種子,那麼這些就是我們要研究的子域。
第三步: 現在就可以最子域進行劃分了,找出核心域,通用域,支撐域,至於為什麼要這麼劃分,後面再解釋,當我們找到核心域之後,再各個子域進行深一步的劃分,劃分成組織,例如分成保護組織,營養組織,疏導組織,這就兒也可以理解成將領域繼續劃分為子域的過程。
第四步:對組織進行進一步的劃分,可以分成細胞,例如根毛細胞、導管細胞等等
我們有沒有必要繼續拆分細胞呢?這個取決於我們研究的業務,例如在之前光學顯微鏡時,研究到細胞也就截止了,具體到其他業務,也是研究到某一步就不需要繼續拆分,而這最小層次的領域,通常就是我們所說的實體,聚合、聚合根、實體以及值物件等內容會在後面深入瞭解。
下面歸納一下上面提到的幾個名詞的概念 :
領域: 往往就是業務的某一個部分 , 例如電商的銷售部分、物流部分、供應鏈部分等, 這些對於電商來說就是各個領域(模組),領域主要作用就是用來驅動範圍, DDD 會將問題範圍限定在特定的邊界內,在這個邊界內建立領域模型,進而用程式碼實現該領域模型,解決相應的業務問題。簡言之,DDD 的領域就是這個邊界內要解決的業務問題域。
子域:相對的一個概念, 我們可以將領域進行進一步的劃分 , 這時候就是子域, 甚至可以對子域繼續劃分形成 子子域(依舊叫子域),就好比當我們研究植物時,如果研究的物件是桃樹,那麼果實根莖葉是領域,可是如果不僅僅要研究果實,還要研究組織甚至細胞,那麼研究的就是果實的子域、組織的子域。
核心域:所有領域中最關鍵的部分 , 什麼意思呢, 就是最核心的部分, 對於業務來說, 核心域是企業根本競爭力, 也是創造利潤裡最關鍵的部分 , 例如電商裡面那麼多領域, 最重要的是什麼? 就是銷售系統, 無論你是2B還是2C, 還是PDD ,這些核心模組就是核心域。
通用域:除了核心域之外, 還需要自己做的一些領域, 例如鑑權、日誌等, 特點是可能被多個領域公用的部分。
支撐域:系統中業務分析階段最不重點關注的領域, 也就是非核心域非通用域的領域, 例如電商裡面的支付、物流,僅僅是為了支撐業務的運轉而存在, 甚至可以去購買別人的服務, 這類的領域就是支撐域。
需要注意的是,這些名詞在實際的微服務設計和開發過程中不一定用得上,但是可以幫助理解DDD的核心設計思想以及理念,而這些思想和理念在實際的IT戰略設計業務建模和微服務設計上都是可以借鑑的。
為什麼要劃分核心域、通用域、支撐域 ?
通過上面可以知道,決定產品和公司核心競爭力的子域是核心域,它是業務成功的主要因素和公司的核心競爭力。沒有太多個性化的訴求,同時被多個子域使用的通用功能子域是通用域。還有一種功能子域是必需的,但既不包含決定產品和公司核心競爭力的功能,也不包含通用功能的子域,它就是支撐域。
這三類子域相較之下,核心域是最重要的,我們下面講目的的時候還會以核心域為例詳細介紹。通用域和支撐域如果對應到企業系統,舉例來說的話,通用域則是你需要用到的通用系統,比如認證、許可權等等,這類應用很容易買到,沒有企業特點限制,不需要做太多的定製化。而支撐域則具有企業特性,但不具有通用性,例如資料程式碼類的資料字典等系統。
那麼為什麼要劃分出這些新的名詞呢? 先想一個問題,對於桃樹而言,根、莖、葉、花、果實、種子六個領域哪一個是核心域?
是不是有不同的理解? 有人說是種子,有人說是根,有人說是葉子,也有人說是莖等等,為什麼會有這種情況呢?
因為每個人站的角度不一樣,你如果是果農,那麼果實就是核心域,你的大部分操作應該都是圍繞提高果實產量進行,如果你是景區管理員,那麼芳菲四月桃花盛開才是你重點關注,如果比是林場工作人員,那麼樹幹才應該是你重點關注的領域,看到沒,對於同一個領域劃分的子域,每個人都有不同的理解,那麼要通過討論確定核心域,確保大家認同一致,對於實際業務開發來說,參與的人員眾多,有業務方面的,有架構師,有後端開發人員,營銷市場等等,勢必要最開始就確定我們的核心域,除了統一大家的認識之外還有什麼好處呢?
對於一個企業來說,預算以及時間是有限的,也就意味著時間以及精力甚至金錢要儘可能多的花在核心的的地方。就好比電商,電商企業那麼多,每一家核心域都有所差別,造成的市場結果也千差萬別,那麼公司戰略重點和商業模式應該找到核心域,且重點關注核心域。
總的來說,核心域、支撐域和通用域的主要目標是:通過領域劃分,區分不同子域在公司內的不同功能
屬性和重要性,從而公司可對不同子域採取不同的資源投入和建設策略,其關注度也會不一樣。