DDD(三)——領域


1,引言

領域一詞在百科上的解釋爲「具體指一種特定的範圍或區域」。java

書中常常講到,某某某是商業界奇才,誰誰誰是天下第一,在此商業界和天下都是領域,指一特定範圍。框架

軟件開發也能夠稱之爲軟件領域,軟件領域下又還有java相關領域,java相關領域下又還有各類框架也能夠稱之爲領域。設計

可是換個說法,軟件領域下又能夠說有醫療領域軟件、物聯網領域軟件等等。日誌

經過以上描述,對於領域一詞應該有必定的概念了,下面咱們來看看DDD中的領域。圖片


2.領域

你可能不知道DDD是什麼,DDD是一種軟件系統分析建模的方法,既節約時間也解決問題的一個方法。開發

經過上文描述,不管是醫療領域軟件、物聯網領域軟件都是軟件系統這個領域當中,無非是所做用的範圍不一樣,那麼DDD中的領域其實也就是字面意思,換到系統分析中來講,就是爲了清晰明確的劃分邊界範圍。電商

《領域驅動設計:軟件核心複雜性應對之道》一書中的總結:軟件

一個領域本質上能夠理解爲就是一個問題域,只要是同一個領域,那問題域就相同。因此,只要咱們肯定了系統所屬的領域,那這個系統的核心業務,即要解決的關鍵問題、問題的範圍邊界就基本肯定了。方法

也就是說領域就是圍繞問題劃分的邊界範圍。因此也能夠理解爲分析需求、分析業務。弄清楚了核心業務,以此拆分問題劃分紅各個領域。im


三、子域

拆分領域,就像分析問題。舉個例子咱們準備週末去爬梧桐山,逐步分析咱們能夠得到什麼時候出發,去什麼地方,作什麼事情,什麼時候結束等等一些列問題,什麼時候出發又能夠分析出住的近的和住的遠的又在何時出發,逐步分析問題,拆分領域,而拆分出來的這些領域就是最初「咱們準備週末去爬梧桐山」這個問題域的子域。


四、核心子域

對於上面的例子「咱們準備週末去爬梧桐山」這個活動有一個核心點,那就是爬梧桐山,全部的準備都是爲了完成爬梧桐山。「爬梧桐山」就是這個問題域的核心域。運用到分析需求中,就是讓咱們能明確的知道系統的核心功能,一切其餘功能都是爲了更好的爲核心功能服務。

爲何要先肯定核心域?

由於做爲一個業務的核心存在,它最能體現系統的核心價值,也是核心競爭力。若是要最大化系統的價值,咱們必然要在覈心域的設計上更勝一籌。 肯定核心域後,咱們在進行開發設計的時候就有了主次之分。


五、通用子域

假若有一個電商系統,那麼必然少不了帳單記錄,操做日誌這些功能,在劃分領域的時候會發現,操做日誌不管是什麼領域都要去插上一腳,這種領域稱之爲核通用子域。


六、支撐子域

一個問題域並不是是靠核心域來支撐的,而是數個非核心領域可是很是重要的領域,仍是電商系統,用戶購買商品造成訂單來解決購物這一個核心領域的問題,若是沒有用戶、商品、訂單這三個子域,也就解決不了核心域的問題,這種稱之爲支撐子域。


七、分析

經過上面這些概念的描述,咱們不難發現這其實就是另外一種方式的UML類圖、業務流程圖,都是爲了清晰思路,是爲了描述各個模塊也就是領域之間的關係,從而理解業務,劃分業務邊界,更好的解決問題解決需求。因此DDD中領域與以往的業務分析並無很大區別,不過是換了一種分析方法。

java一樣有此方法,能夠把類當作問題域,把方法當作子域。


八、限界上下文和通用語言

領域是爲了劃分邊界的,可是有些時候並不能經過領域來肯定邊界。從業務上劃分購買、促銷、售後等下文。

從需求上着手,操做日誌也能夠做爲有一個獨立的上下文。

觀察的角度不一樣,也就能夠劃分不一樣的上下文,正所謂一萬我的眼中有一萬個哈姆雷特,如何讓團隊成員都能理解所描述的每一個上下文呢,這就須要通用語言這個概念了,通用語言就是字面意思,爲了讓團隊成員統一標準,避免出現你的圖片屬性叫img,他的圖片屬性叫image,你們理解起來也有困難。


九、小結

上述中,簡要梳理了DDD中領域、核心域、通用子域、支撐子域的定義。

  • 領域是有範圍界限的,也能夠說是有邊界的。

  • 核心域是業務系統的核心價值所在。

  • 通用子域能夠理解爲業務系統全部子域的消費者,提供着通用服務。

  • 支撐子域專一於業務系統的某一重要的業務,來支撐和完善業務系統。

因此領域其實就是分析需求、劃分模塊、清晰業務的一種方式方法。

相關文章
相關標籤/搜索