August 15 16:30~18:30
合法免費電子版可下載
前幾天在〈[還少一本書] Domain-Driven Design Distilled〉介紹一本不到150頁的Domain-Driven Design(領域驅動設計)書籍,今天介紹這本《Domain-Driven Design Reference: Definitions and Pattern Summaries》(簡稱《DDDR》)更加袖珍,本文只有72頁。
這本書的作者就是領域驅動設計的發明人,撰寫《Domain-Driven Design: Tackling Complexity in the Heart of Software》(簡稱《DDD》)的Eric Evans。在《DDD》出版10年之後,Eric Evans整理書中重要的pattern的定義,寫成今天要介紹的這本《DDDR》。
在介紹這本書之前先說明一下,這本書有作者Eric Evans提供的免費PDF/Word版本可在此下載。
這本書副標題已經說明了它的目的:定義與模式摘要(Definitions and Pattern Summaries
)。書中用1~2頁的篇幅介紹一個pattern,一共介紹40幾個pattern,方便想要快速瀏覽每一個pattern內容的讀者。
▼Bounded Context模式,節錄自《DDDR》。
***
小缺點
既然這本書作者提供了電子檔,內容Teddy就不多加說明。今天想談兩點,首先這本書的pattern有一個美中不足的地方,就是格式不統一。
▼例如從書中目錄來看,感覺第一章介紹了六個pattern。
▼但翻到內文,比較一下下面Refactoring Toward Deeper Insight和上面Bounded Context模式的內容,格式明顯不同。Bounded Context模式的Therefore:之後的內容屬於解決方案(Solution),這是參考Alexander的格式。但是Refactoring Toward Deeper Insight並沒有這個段落,到底這是一個pattern還是只是用來交代一個概念的章節就不是很清楚。
***
模式語言(Pattern Language)
▼下圖節錄自書中的「領域驅動設計建構模組之模式語言」(A Pattern Langauge for Building Blocks of a DDD),書中有幾張類似這樣的圖描述不同的DDD主題。這種圖稱為模式語言(Pattern Language)。
接下來要談如何讀一個模式語言。根據發明模式語言的建築師Alexander的說法,一個模式語言會有一個起點,從上圖來說就是Domain-Driven Design模式。這個起點定義了這個語言的「整體的感覺」,起點之下的第一層模式讓這個起點更加完整。Domain-Driven Design模式之下有Services、Entities、Value Objects、Language Architecture和Smart UI這五個模式。也就是說Domain-Driven Design的建構模組(building block)由這五個模式所組成,而Domain-Driven Design模式成為這五個模式的情境(context)。
Entities和Value Objects之下還有其他模式,像是Repositories、Aggregates、Factories,閱讀的方法同上。Repositories、Aggregates、Factories這三個模式讓Entities和Value Objects模式更加完整,而Entities和Value Objects模式則是這三個模式所存在的context。
上圖的模式語言和Alexander的模式語言有兩點不同:
- 模式與模式之間的有方向箭頭代表兩個模式的上下關係,在Alexander所畫的圖中箭頭是並沒有標示關係名稱,而Eric Evans所畫的圖有。標示關係名稱的圖看起來很像UML class diagram。
- Domain-Driven Design模式和Smart UI模式中間的線沒有方向性而且還打個叉,用以表示這兩個模式彼此是互斥的。模式彼此之間互斥關係似乎在Alexander的模式語言中沒有看他這樣用過。
***
友藏內心獨白:看圖說故事比較容易記憶。
模式語言(Pattern Language)這一段,
回覆刪除「一個模式語言會有一個起點,從上圖來說就是Domain-Driven Design模式。」
但是圖裡面是 Model-Driven Design