領域驅動設計與動態文檔

pw8c 9年前發布 | 5K 次閱讀 領域驅動

英文原文:DDD and Living Documentation

創建文檔是一件令人厭煩的工作,文檔內容很可能是過期的,或者會產生誤導。但某種新的思想能夠同時改善你的文檔與代碼。在今年于倫敦舉辦的 DDD Exchange 大會的一場演講中,Cyrille Martraire 為聽眾闡述了如何在進行領域驅動設計(DDD)時創建動態文檔(living documentation)。

在 Martraire 看來,文檔的目的就是為了將信息傳遞給他人、在將來進行參考以及為了應付可能會到來的合規檢查(regulatory compliance)。DDD 關注的是領域知識,而事件風暴是一種捕獲這種知識的方法,Martraire 認為這是一種能夠有效地探索一個領域的途徑。他還建議使用行為驅動開發(BDD)技術,通過對話及場景中的實例對行為進行文檔化。通過使用類似于 Cucumber 的工具,可以將場景以代碼的方式進行運行,這正是動態文檔的第一個例子,它與實際的代碼始終是同步的。

Martraire 表示,如果從 DDD 的角度來看待代碼,那么邊界上下文已經包含在這些代碼之中了,只是這種包含是隱式的。通過為包或命名空間添加標注,他就能夠聲明與描述多個不同的上下文,而這些描述同樣也是始終與代碼保持同步的。他認為通過這種技術還能夠為他帶來一種非常有價值的良好副作用,即他能夠描述不同的 DDD 概念,他將這一過程稱為嵌入式學習。

按照同樣的方式,統一語言其實也已經表述在代碼之中了,包括類、接口和方法。Martraire 通過對與領域相關的部分添加標注,并且以某種處理過程對添加了標注的代碼進行掃描,就生成了一份始終保持最新的活術語表。在他之前所參與的一個項目中,他就通過這種方式自動生成了一份術語表,并定期地發送給項目負責人,這在他看來是一個巨大的成功。

為了舉例說明如何對設計進行文檔化,Martraire 使用了一個多邊形架構,其中某個邊的內部只包含領域模型,而其它部分都在外部。這一模式已經實現了文檔化,只需在代碼中謹慎地遵循這一模式,就能夠確保設計已隱含在代碼之中。他再次通過對包或命名空間添加標注的方式創建了活圖表,并保證該圖表正確地反映出代碼。

Martraire 在這一技術中還發現了一個重要的價值:如果你發現很難按照這種方式創建一個活術語表或者是其它類型的動態文檔,這就是一個信號,它表示你實現 DDD 的方式很可能有錯。這就意味著可以通過文檔檢查你的代碼現狀,并對代碼加以改善。

Martraire 目前正在撰寫一本名為《Living Documentation》的書籍,可在 Leanpub 上進行試讀。

來自: InfoQ
 本文由用戶 pw8c 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!