領域驅動設計的方法實踐

之前看過領域設計一本書,還寫過讀書心得物臂,從理論上介紹了領域設計的一些思路和方法論。
http://www.reibang.com/p/712a49baf468
這里更多的是從實踐的角度去落地領域設計的方法产上。
從領域設計到實踐本人總結了幾個階段:

  • 構建領域詞匯表
  • 事件風暴會議
  • 業(yè)務拆分
  • 模型設計

構建領域詞匯表:解決溝通障礙

目標就是統(tǒng)一領域專家棵磷,產(chǎn)品經(jīng)理,業(yè)務開發(fā)晋涣,測試等多個崗位的語言仪媒,
減少溝通的障礙,便于理解谢鹊。
通常為了方便程序員之間溝通算吩,領域詞匯表會中英兩份,英文詞匯還會對應代碼中的Class類名佃扼,成員變量名偎巢。
比如,一個機器學習系統(tǒng)兼耀,
常見的領域詞匯表:
數(shù)據(jù)集 -- dataset
模型 -- model
機器學習 -- MachineLearning
訓練 -- train
預測 -- predict
特征 -- feature
數(shù)據(jù)清洗 -- Data cleaning
致性檢查 -- consistency check
估算 -- estimation
整例 / 變量刪除 -- casewise / variable deletion
成對刪除 - pairwise deletion
探索性分析 -- EDA

再比如压昼,一個下單系統(tǒng)
商家/訂單/用戶/地址/商品 等等

如果系統(tǒng)是0-1的階段求冷,領域詞匯可以由領域專家來節(jié)點,表達和含義窍霞。
如果系統(tǒng)已經(jīng)過了0-1的階段匠题,建議回顧歷史系統(tǒng),也就是直接進入到領域事件的梳理官撼,就是下一個階段梧躺。

事件風暴會議:拆分事件對象關系條件

圍繞事件不斷的拓展業(yè)務內(nèi)容。
比如傲绣,針對一個訂單系統(tǒng)的事件風暴掠哥,
訂單系統(tǒng)中有很多事件,如果已經(jīng)是一個成熟系統(tǒng)了秃诵,可以直接看下代碼中的ENUM定義续搀,
已經(jīng)接單,已經(jīng)就緒菠净,已經(jīng)下單禁舷,已經(jīng)派送,已經(jīng)送達毅往。圍繞一個“已經(jīng)下單”的領域事件牵咙,領域風暴會議可能會畫出如下一張圖。



比如:

  • 事件:下單事件
  • 圍繞事件攀唯,產(chǎn)生了領域的對象(領域詞匯對應的對象):
    • 用戶
    • 地址
    • 商店
    • 訂單
    • 商品
  • 不斷把領域詞匯聚集起來洁桌,形成聚合根,比如商品

在一個成熟的團隊中侯嘀,領域風暴事件中每個顏色代表一層含義另凌。比如上面這個示意圖中。

  • 紅色: 代表中心的領域事件
  • 藍色: 代表事件處罰的條件
  • 黃色: 代表領域對象
  • 紫色: 代表聚合根

這個顏色的含義戒幔,一般來自團隊之間的磨合產(chǎn)生的習慣吠谢。非必須。

如果一個系統(tǒng)是0-1诗茎,怎么組織一次事件風暴會議工坊,
一個常用的手段是利用主流程來拆分。
比如一個機器學習系統(tǒng):
導入數(shù)據(jù) --> 數(shù)據(jù)加工 --> 觸發(fā)學習 --> 學習完成 --> 模型評估 --> 模型發(fā)布敢订。
比如一個訂單系統(tǒng):
添加商品 --> 下單 --> 商家接單 --> 商家發(fā)貨 --> 騎手接單--> 騎手送達 -->確認收貨王污。

業(yè)務拆分:DDD到微服務

事件風暴會結合每個事件,不斷的拆分出領域對象枢析,
然后講相關的對象聚合在一起玉掸,區(qū)分行為。但是到具體的服務設計之后醒叁。
會再劃分出子領域司浪,每個子領域對應一個或者一組相關的微服務泊业。
不同組的微服務之間有明確的界限來劃分自己的指責,同時多個微服務構成了一個大的系統(tǒng)啊易。

比如吁伺,還是之前的下單的業(yè)務場景。
“下單”是一個子領域
圍繞下單這個主題租谈,會形成一個核心的主題域處理下單
但是圍繞下單篮奄,還有用戶的操作,商家的操作相關操作作為支撐割去。
所以拆分關系是:


下單子領域

綠色是這個子領域的一個核心主題服務窟却,灰色是這個子領域的支撐服務,微服務的設計

  • 用戶 可作為一個微服務呻逆,支撐訂單這個核心服務
  • 商家 可作為一個微服務夸赫,支撐訂單這個核心服務
  • 訂單 可作為一個微服務

貧血模型和充血模型設計:表和服務接口

領域對象的設計,先設計核心層咖城,核心層結束后
針對持久化層設計DO茬腿,
針對傳輸對象設計DTO,
針對業(yè)務表現(xiàn)層設計VO宜雀,

設計核心領域對象的時候切平,可以用貧血模型,也可以用充血模型辐董。
比如貧血模型設計訂單這個領域對象悴品。

“貧血模型設計 ” : 數(shù)據(jù)邏輯分開,數(shù)據(jù)即領域郎哭,service對應領域對象的行為他匪,對象關系的封裝菇存。

  • 商家DO
    • 商家id
    • 商家name
    • 商品id
  • 商品DO
    • 商品id
    • 商品name
    • 商品價格 price
  • 商家Service
  • 商品Service
    • get商品夸研,從商家service和商品service分別獲取兩個entity,做組裝

“充血模型設計” :增加一個Domain層依鸥,把數(shù)據(jù)和方法封裝為Domain

  • 商品Object
    • 商品id
    • 商品name
    • 商家id
  • 商品DAO
  • 商品Domain: 數(shù)值 + 方法亥至,DAO的調(diào)用 + 邏輯的組裝
  • 商品service
    • getEntity,Domain里面獲取所有需要的值

tips:很多人會問到貧血模型和充血模型有什么差別贱迟,用自己的理解方式姐扮,本質是一樣的,貧血模型的封裝性體現(xiàn)在service層衣吠,而充血模型多了一個domain層茶敏,領域的封裝性放到了domain層而已。
當然大家也可以用網(wǎng)上“面向面試”的回答方式:貧血模型數(shù)據(jù)和service分離缚俏,充血模型數(shù)據(jù)和service統(tǒng)一惊搏。

補充:微服務的治理

這里不是重點贮乳,只提一下和領域設計相關的是多個服務之間的解耦,必要的兩個技術是:

  • 消息隊列:一個訂單事件再多個服務之間流轉恬惯,通常是通過訂單消息來通知各個服務向拆。
  • 注冊中心:微服務之間通常不感知哪個物理服務上線和下線,通常通過注冊和發(fā)現(xiàn)來調(diào)用具體的服務酪耳。
    消息對接和注冊中心這里不過多介紹了浓恳,如果不了解還請查閱相關資料。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碗暗,一起剝皮案震驚了整個濱河市颈将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌言疗,老刑警劉巖吆鹤,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洲守,居然都是意外死亡疑务,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門梗醇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來知允,“玉大人,你說我怎么就攤上這事叙谨∥赂耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵手负,是天一觀的道長涤垫。 經(jīng)常有香客問我,道長竟终,這世上最難降的妖魔是什么蝠猬? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮统捶,結果婚禮上榆芦,老公的妹妹穿的比我還像新娘。我一直安慰自己喘鸟,他們只是感情好匆绣,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著什黑,像睡著了一般崎淳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愕把,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天拣凹,我揣著相機與錄音茵瘾,去河邊找鬼。 笑死咐鹤,一個胖子當著我的面吹牛拗秘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祈惶,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雕旨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捧请?” 一聲冷哼從身側響起凡涩,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疹蛉,沒想到半個月后活箕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡可款,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年育韩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闺鲸。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡筋讨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摸恍,到底是詐尸還是另有隱情悉罕,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布立镶,位于F島的核電站壁袄,受9級特大地震影響,放射性物質發(fā)生泄漏媚媒。R本人自食惡果不足惜嗜逻,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欣范。 院中可真熱鬧变泄,春花似錦令哟、人聲如沸恼琼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晴竞。三九已至,卻和暖如春狠半,著一層夾襖步出監(jiān)牢的瞬間噩死,已是汗流浹背颤难。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留已维,地道東北人行嗤。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像垛耳,于是被迫代替她去往敵國和親栅屏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容