標籤:

看完這篇,你就會了解什麼是 DDD

DDD 是領域驅動設計,這個名字看起來很高大上,十分適合非開發背景的產品同學用來裝13。但是 DDD 是個什麼玩意呢?

其實很簡單,每個公司都有不同的部門,每個部門都有自己要做的事,比如銷售部門、技術部門、編輯部門。老闆沒必要讓每個員工既能當銷售,又能敲代碼,還能舞文弄墨,因為這樣的人太難招了。而如果把公司劃分為若干部門,那麼老闆只需要招專業的人做專業的事就行,難度明顯降低。

DDD 的思想也一樣,開發同學在設計系統的時候,會分為若干層,每一層都有自己專門負責的事情,所謂「術業有專攻」。這樣做的好處是,系統的擴展性比較高。

對於產品同學來說,沒必要關心這些層都叫什麼名字、每層裡面都包含什麼玩意兒、層和層之間如何互通……但產品同學需要了解的是 DDD 思想中的「領域模型」。

模型是什麼?我們以一次就診舉例。

  1. 就診過程中,我們會接觸到許多人,如挂號員、門診專家、收費員、藥房藥師,這些人都承擔不同的角色。挂號員負責出售專家的號,門診專家負責給你看病,收費員負責收費、藥師負責取葯。
  2. 我們非常清楚就診的目標,就是「為了查自己到底什麼病」。
  3. 整個就診過程,由一系列滿足規範要求的動作來完成就診的目標,比如門診專家需要給我們一個病歷記錄和藥方,藥師需要遵循專家輸出的藥方給我們取葯。

「領域模型」其實就是類似的思維模式,以「就診」作為出發點,把醫生、藥師等作為在就診過程中可能遇見的角色,而「就診」有明確的目標,整個過程中會存在一些列的動作才能達到這個目標。

領域模型中存在兩類數據,一種是基礎數據,性格內向;一種是業務數據,性格外向。業務數據可以讓基礎數據(實體)彼此關聯起來,有點催化劑的感覺。所以建模的前提條件是:分清楚基礎數據、業務數據。

催化劑太多不是什麼好事,如果讓基礎數據之間建立了太多關聯,那麼這個模型一定是不穩定或難實現的。所以還是沿用前面的原則:「術業有專攻」,不要企圖搞全才,踏實的去細化粒度吧,以前是神經血管,生活粗糙,現在是細胞基因,讓生活精緻一點。

細胞有細胞壁(植物),血管也有血管壁。細胞、血管就是聚合,而細胞壁、血管壁就是聚合邊界。所謂聚合根,就像做支架手術,必須得先找到某動脈,然後才能順著動脈找到需要放支架的地方,這根關鍵的入口動脈,就是聚合根。

對於領域而言,模型關係神馬的,這一堆高大上的玩意,都可以抽象為「四色原型」,就像無論什麼人,都可以用幾個標籤來概括他。那麼,何謂四色?簡而言之就是:什麼人的角色、在什麼地方的角色、用什麼東西的角色、做了什麼事。

人、地方、東西、事,就是所謂的四色。

繼續前面就診的例子:病人找專家看病,並拿到一個病歷記錄。

  1. 人:病人類型(哪個科室的病人)
  2. 地方:病人(在醫院的角色是病人)
  3. 東西:專家(診治方的角色是醫生)
  4. 事:病歷記錄

如何利用四色原型讓設計變得更靈活呢?

  1. 去掉病歷記錄和專家的關聯,改為查詢。即:通過專家來查詢病歷記錄。因為一個專家可能會輸出 n 份病歷記錄。但此時需要讓專家關聯一個病人就診時的狀態,因為我們想查詢的是病人就診時的病歷記錄,而不是現在的病歷記錄。
  2. 去掉病人和專家之間的關聯,改為查詢。

推薦閱讀:

光學字元識別(OCR)類產品分析
互聯網簡訊-20180309
如何成為BAT瘋搶的產品實習生?
《啟示錄-打造用戶喜愛的產品》讀書筆記
概念篇(1): 什麼是PV、UV、IP、VV、CV?

TAG:產品經理 |