l

2016年8月17日 星期三

[還少一本書] Domain-Driven Design Reference

August 15 16:30~18:30

螢幕截圖 2016-08-15 17.15.53

 

合法免費電子版可下載

前幾天在〈[還少一本書] 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模式之下有ServicesEntitiesValue ObjectsLanguage ArchitectureSmart UI這五個模式。也就是說Domain-Driven Design的建構模組(building block)由這五個模式所組成,而Domain-Driven Design模式成為這五個模式的情境(context)。

EntitiesValue Objects之下還有其他模式,像是RepositoriesAggregatesFactories,閱讀的方法同上。RepositoriesAggregatesFactories這三個模式讓EntitiesValue Objects模式更加完整,而EntitiesValue Objects模式則是這三個模式所存在的context。

上圖的模式語言和Alexander的模式語言有兩點不同:

  • 模式與模式之間的有方向箭頭代表兩個模式的上下關係,在Alexander所畫的圖中箭頭是並沒有標示關係名稱,而Eric Evans所畫的圖有。標示關係名稱的圖看起來很像UML class diagram。
  • Domain-Driven Design模式和Smart UI模式中間的線沒有方向性而且還打個叉,用以表示這兩個模式彼此是互斥的。模式彼此之間互斥關係似乎在Alexander的模式語言中沒有看他這樣用過。

***

友藏內心獨白:看圖說故事比較容易記憶。

1 則留言:

  1. 模式語言(Pattern Language)這一段,
    「一個模式語言會有一個起點,從上圖來說就是Domain-Driven Design模式。」
    但是圖裡面是 Model-Driven Design

    回覆刪除