最近在阿姆斯特丹舉辦的領域驅動設計歐洲大會上,Cyrille Martraire在其演講中談論到模式的重要性時表示,了解領域驅動設計(DDD)之外諸多現存的模式很有必要。
Ward Cunningham因其第一個搭建了wiki網站而為大家熟知,但同時他也是第一批對模式進行描述的人。這第一批模式關注于信息完整性,Martraire認為這些早期的模式都是分析模式,它們用于描述如何從業務層面來更好地理解問題。例如例外值模式,這個模式讓開發人員可以從業務的角度來編寫代碼,而不用考慮特殊情況,如處理非法值或零值。另一個有意思的模式是診斷查詢模式,這個模式認為一個對象應該能夠描述其成為當前狀態的詳細過程,診斷功能可以被用來取代輸出日志或查看故障的過程。例如,一個賬戶對象內有一百歐元,可以被追溯為由一筆美元以及一筆英鎊相加而轉換來的。
另一個模式的來源是四人組在90年代中期所著的《設計模式》。在這些模式中,Martraire找出了四個對模型化領域中概念及關系特別有用的模式:
組合模式,用于將對象組合成樹形結構,可以讓客戶端以相同的處理方式來處理獨立或組合的對象。 解析器模式,用于分析特定語言中的某個語句。 享元模式,使用共享來支持大量細粒度的對象。 策略模式,將算法邏輯從其調用中剝離。Martraire在早期的職業生涯中也研究了Martin Fowler的《分析模式》一書。從這本書中他學到了一系列在零售銀行、醫療、測量領域中使用到的新的模式。他認為通過學習各種模式并透徹了解其原理,就可以將它們應用到新的領域。然而,他強調,如果要獲得進一步的理解,了解模式和其中理念發展的過程非常重要,而僅僅學習如今現存的模式是不夠的。
如果你還不了解這些模式,那就該思考你是否認真對待了設計過程,或過于關注那些最新技術。一個例子是事件溯源(event sourcing),這個模式常被默認使用,這讓一些只需要簡單的增刪改查模型就可以滿足的代碼,無謂地變得復雜。他建議花更多時間在領域模型的設計過程上,如果發現設計存在問題,那就多進行改進。Martraire認為,如果你每次遇到問題,都傾向于創建新項目,你最終只會創造出你自己都無法理解的模型。最后回顧整個設計,你會發現它們都只是增刪改查模型。為了訓練你的技能,并了解更多復雜模型,可以研究成熟的遺留項目,在這些項目中你能找到深層次的領域模型。
Martraire目前正在寫《活文檔(Living Documentation)》一書,其中介紹了如何利用注解來從代碼中直接創建文檔,用于描述領域驅動設計概念、用到的模式以及其他設計概念。
查看英文原文:The Importance of Patterns in DDD