DDD 領域驅動設計一切回到現實問題
極簡觀念系列之一
DDD是一種設計哲學,而不是工具。
為什麼要做軟體?
軟體是為了解決現實世界的問題。
人知道怎麼解決現實世界的問題。若要電腦代勞,則需要在電腦的世界建立模型。
模型就是程式碼
為了知道我們建造出的模型有沒有發揮作用,我們需要測試。
現實的問題經常在變化
人可以因應變化,但電腦不能。
為了讓模型因應現實問題的變化,人只好去修改與維護模型,我們希望它是可讀性高的。
但,經過測試且可讀性高的模型就是好的模型嗎?
模型是電腦世界中,現實問題的縮影。
好的模型需要具備對現實問題的深入了解。因為包含了現實的核心邏輯,好的模型面對變動不需要常常修改;反之,壞的模型只符合少數情境,需要常常修改。
好的模型由誰來設計
設計好的模型需要三個角色:1.了解現實問題的人2.建造模型的人3.協助二者合作的人
設計好的模型需要三個角色:1.了解現實問題的人(領域專家)2.建造模型的人(軟體工程師)3.協助二者合作的人(DDD專家)
設計模型需要所有人的參與。
但,領域專家和工程師討論的是同一件事?
先找出一個統一語言。領域專家可以用統一語言描述現實問題中的一個觀念,工程師也可以用這個統一語言建造出電腦世界裡的一個觀念,他們討論的就是同一回事。
如何設計好的模型
建造好的模型需要:1.做什麼(目標)2.用什麼做(零件)
建造好的模型需要:1.做什麼(目標)STRATEGIC DESIGN
2.用什麼做(零件) TACTIC DESIGN
STRATEGIC DESIGN:經由討論分析現實問題(DOMAIN),切分成能夠被解決的子問題(SUBDOMAIN)。
STRATEGIC DESIGN:針對能夠被解決的子問題(SUBDOMAIN),設計有界限的模型(BOUNDED
CONTEXT)。先前討論出的統一語言在模型內需保持一致。
TACTIC DESIGN:在模型中描述對象有兩種觀點:ENTITY 和 VALUE
OBJECT。
ENTITY是可以識別的對象,代表現實問題中的特定對象。其屬性可隨著時間改變。在一定時間內擁有唯一的識別標示。
VALUE OBJECT是不需識別的對象,代表現實中不需追蹤其內容的對象。不含唯一標示也沒有生命週期,其屬性就代表所有內容,通常設計成無法修改。
就像這樣,TACTIC DESIGN提供我們許多工具去設計BOUNDED CONTEXT。這可以用來解決我們分析出的SUBDOMAIN問題。
BOUNDED CONTEXT是答案,SUBDOMIAN是問題。
DDD的精神,就是學習怎麼分析SUBDOMAIN,以及怎麼設計BOUNDED CONTEXT。
你可以接著讀:
DDD之父寫的理論書 DDD之父認可的應用書
最後,就像DDD一再強調,做軟體是一個不斷討論與修正的過程。
研究與實踐DDD也是。
從今天開始討論吧!
END
Top Related