領域驅動設計

35
DDD 領域驅動設計 一切回到現實問題 極簡觀念系列之一

Transcript of 領域驅動設計

Page 1: 領域驅動設計

DDD 領域驅動設計一切回到現實問題

極簡觀念系列之一

Page 2: 領域驅動設計

DDD是一種設計哲學,而不是工具。

Page 3: 領域驅動設計

為什麼要做軟體?

Page 4: 領域驅動設計

軟體是為了解決現實世界的問題。

Page 5: 領域驅動設計

人知道怎麼解決現實世界的問題。若要電腦代勞,則需要在電腦的世界建立模型。

Page 6: 領域驅動設計

模型就是程式碼

Page 7: 領域驅動設計

為了知道我們建造出的模型有沒有發揮作用,我們需要測試。

Page 8: 領域驅動設計

現實的問題經常在變化

Page 9: 領域驅動設計

人可以因應變化,但電腦不能。

Page 10: 領域驅動設計

為了讓模型因應現實問題的變化,人只好去修改與維護模型,我們希望它是可讀性高的。

Page 11: 領域驅動設計

但,經過測試且可讀性高的模型就是好的模型嗎?

Page 12: 領域驅動設計

模型是電腦世界中,現實問題的縮影。

Page 13: 領域驅動設計

好的模型需要具備對現實問題的深入了解。因為包含了現實的核心邏輯,好的模型面對變動不需要常常修改;反之,壞的模型只符合少數情境,需要常常修改。

Page 14: 領域驅動設計

好的模型由誰來設計

Page 15: 領域驅動設計

設計好的模型需要三個角色:1.了解現實問題的人2.建造模型的人3.協助二者合作的人

Page 16: 領域驅動設計

設計好的模型需要三個角色:1.了解現實問題的人(領域專家)2.建造模型的人(軟體工程師)3.協助二者合作的人(DDD專家)

Page 17: 領域驅動設計

設計模型需要所有人的參與。

Page 18: 領域驅動設計

但,領域專家和工程師討論的是同一件事?

Page 19: 領域驅動設計

先找出一個統一語言。領域專家可以用統一語言描述現實問題中的一個觀念,工程師也可以用這個統一語言建造出電腦世界裡的一個觀念,他們討論的就是同一回事。

Page 20: 領域驅動設計

如何設計好的模型

Page 21: 領域驅動設計

建造好的模型需要:1.做什麼(目標)2.用什麼做(零件)

Page 22: 領域驅動設計

建造好的模型需要:1.做什麼(目標)STRATEGIC DESIGN

2.用什麼做(零件) TACTIC DESIGN

Page 23: 領域驅動設計

STRATEGIC DESIGN:經由討論分析現實問題(DOMAIN),切分成能夠被解決的子問題(SUBDOMAIN)。

Page 24: 領域驅動設計

STRATEGIC DESIGN:針對能夠被解決的子問題(SUBDOMAIN),設計有界限的模型(BOUNDED

CONTEXT)。先前討論出的統一語言在模型內需保持一致。

Page 25: 領域驅動設計

TACTIC DESIGN:在模型中描述對象有兩種觀點:ENTITY 和 VALUE

OBJECT。

Page 26: 領域驅動設計

ENTITY是可以識別的對象,代表現實問題中的特定對象。其屬性可隨著時間改變。在一定時間內擁有唯一的識別標示。

Page 27: 領域驅動設計

VALUE OBJECT是不需識別的對象,代表現實中不需追蹤其內容的對象。不含唯一標示也沒有生命週期,其屬性就代表所有內容,通常設計成無法修改。

Page 28: 領域驅動設計

就像這樣,TACTIC DESIGN提供我們許多工具去設計BOUNDED CONTEXT。這可以用來解決我們分析出的SUBDOMAIN問題。

Page 29: 領域驅動設計

BOUNDED CONTEXT是答案,SUBDOMIAN是問題。

Page 30: 領域驅動設計

DDD的精神,就是學習怎麼分析SUBDOMAIN,以及怎麼設計BOUNDED CONTEXT。

Page 31: 領域驅動設計

你可以接著讀:

DDD之父寫的理論書 DDD之父認可的應用書

Page 32: 領域驅動設計

最後,就像DDD一再強調,做軟體是一個不斷討論與修正的過程。

Page 33: 領域驅動設計

研究與實踐DDD也是。

Page 34: 領域驅動設計

從今天開始討論吧!

Page 35: 領域驅動設計

END