DDD理論學習系列(2)-- 領域

DDD理論學習系列目錄微信

1. 引言

領域一詞,主要有如下兩個意思:學習

  1. 一國主權所達之地。
  2. 學術思想或社會活動的範圍。

不論是指國家的主權範圍也好仍是學術活動範圍,都是在講一個範圍,一個界限。
好比咱們常說的,學術領域、思想領域、技術領域、語言領域、物理領域、醫學領域、遊戲領域、JAVA領域、.NET領域等等,它們中不論是泛指仍是特指某個領域,都是限定在某個範圍以內的。
因而可知領域一詞重在範圍的界限網站

下面咱們就回歸正傳,DDD,Domain Drive Design,全稱,領域驅動設計。那這個領域具體指什麼呢,在DDD中有什麼特殊含義呢?設計

2. DDD中的領域

咱們要先弄明白DDD是幹什麼的。
DDD是一種綜合軟件系統分析和設計的面向對象建模方法,旨在幫咱們設計高質量的軟件模型,是一種解決複雜中大型軟件的一套行之有效的方式。日誌

那既然是用來解決軟件問題,那天然要弄清楚軟件系統的業務需求。對象

那就以咱們以前的辦公設備微信公衆號開發的案例爲例,來分析一下。
雖然是微信公衆號開發,但其實涉及到的主要是商品、用戶、訂單、報價、支付、物流、報修相關業務,其本質仍是電子商務系統開發。
反過來看,任何電子商務網站也都涉及到商品、用戶、訂單、支付、物流這些核心業務,而這也正是全部電商領域都會涉及到的業務。遊戲

其實不論是普通的電子商務網站,仍是像京東、淘寶、亞馬遜這樣的電商平臺,其本質都是電商領域,只不過是系統的複雜性不一樣而已。開發

因此咱們的案例也就能夠理解爲一個基於微信公衆號平臺的電商領域普通電子商務網站的開發。get

經過以上的舉例說明,只是想說明,DDD中的領域也並無什麼特別之處,它只是被界限在指定的業務需求之中,有了更清楚的範圍邊界。電商

其實也能夠參照原著《領域驅動設計:軟件核心複雜性應對之道》的總結:

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

弄清了業務領域,接下來就是領域的拆分。下面咱們就來細化咱們案例中的業務場景,來介紹引入的核心域和子域的概念。

3. 子域

回到咱們的案例,基於微信公衆號的電子商務網站的開發。
咱們先拋開DDD,按照咱們傳統的開發設計思路,以數據優先的方式,上來就建表寫代碼,並且按照咱們一向的做風,確定會先設計Product表,由於電商的哪個環節都跟商品息息相關,在這裏Product對象就是一個核心對象。
那既然Product對象是核心對象,那Product對象所處的領域--商品列表領域,是否是就是咱們這一節講的核心域?
答案是否認的。
DDD跟咱們傳統的軟件開發設計過程不一樣,它注重領域建模。
在瞭解了業務領域的業務規則以後,咱們爲了完成對一個複雜領域的分析,每每咱們要先簡化之,即領域拆分。能夠理解爲把領域中的複雜大問題,拆分紅小問題,各個擊破。也就是將一個領域拆分紅多個子域,再針對每一個子域進行分析。而子域又能夠分爲核心域、通用子域、支撐子域。
那什麼是核心域、通用子域、支撐子域呢?
下面咱們就對咱們的案例進行拆分來梳理這些概念。

對於咱們的案例涉及到的業務,商品、用戶、訂單、報價、支付、物流、報修相關業務,咱們能夠大體拆分紅如下幾個子域:

  • 商品子域
  • 用戶子域
  • 銷售子域
  • 訂單子域
  • 支付子域
  • 物流子域
  • 維修子域

3.1 核心域

若是從幾個子域中肯定核心域,這也許難以決定,不要緊。咱們先來回答一個問題。
什麼是電商網站?在線商品買賣平臺。
電商領域的核心就是爲了商品買賣
咱們知道開發這個電商網站的目的是爲了尋求推廣和銷售利潤的最大化。
因此天然而然核心域就是銷售子域了。

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

3.2 通用子域

通用子域,顧名思義,也就是服務於整個業務領域。好比咱們要爲該網站提供一個日誌系統,用來記錄一些日誌。咱們能夠設計一個日誌子域來供其餘子域使用。

3.3 支撐子域

支撐子域的做用於業務系統的某些重要業務而非核心業務,它關注於業務的某一方面,來支撐完善業務系統。
咱們劃分的子域中除了銷售子域,其餘均可以說是支撐子域。
好比物流子域,就是專一於物流相關業務,支撐着訂單發貨以及物流跟蹤的重要流程。

4. 總結

本節主要結合案例,簡要梳理了DDD中領域、核心域、通用子域、支撐子域的定義。

  • 領域是有範圍界限的,也能夠說是有邊界的。
  • 核心域是業務系統的核心價值所在,承載着一個系統的重中之重。
  • 通用子域能夠理解爲業務系統全部子域的消費者,提供着通用服務。
  • 支撐子域專一於業務系統的某一重要的業務,來支撐和完善業務系統。

這一節遺留了一個問題,那就是文章開頭就說領域是有範圍界限的,但這個範圍界限在DDD中如何表述呢? 這就是下一篇文章要講的——限界上下文。

相關文章
相關標籤/搜索