架構視角 - DDD、TDD、MDD領域驅動、測試驅動仍是模型驅動?

提出問題架構

    「領域驅動設計」之於微服務,比如麥當勞之於漢堡(我的更喜歡肯德基,漢堡要大些,麥當勞的漢堡,想吃頓飽飯,請先給我上6個😂)。可是TDD測試驅動、MDD模型驅動好像也很火啊,到底什麼在驅動?併發

 

分析問題框架

不用着急,這是三個5分鐘就能區分開的概念。開發中在協同工做。分佈式

首先糾正兩個誤區。DDD是Domain-Driven Design領域驅動設計。可是TDD和MDD的D意思是Development開發的意思。TDD對應測試驅動開發,MDD對應模型驅動開發。微服務

這就是爲何不少大佬在大談特談「領域」,可是測試驅動、模型驅動其實也都在用,但談的少些。由於這是我等實際一線寫代碼的同窗才用的。高併發

其次,它們三者之間的關係也不是感官直覺感覺到的這種:工具

 

而實際上他們是在不一樣的階段使用的方法。在咱們團隊,使用關係是這種:測試

 

下面會介紹咱們團隊怎麼用的。設計

 

解決問題blog

在Eric Evans的《領域驅動設計-軟件核心複雜性應對之道》中第一節的消化知識開始就開始建模。在咱們平時的設計開發中,在描述整體設計思路也須要用模型也表示。通常常使用的圖有:

流程圖

 https://baike.baidu.com/item/%E6%B5%81%E7%A8%8B%E5%9B%BE

時序圖 https://baike.baidu.com/item/%E6%97%B6%E5%BA%8F%E5%9B%BE/3659178?fr=aladdin

實體-聯繫圖 https://baike.baidu.com/item/%E5%AE%9E%E4%BD%93%E5%85%B3%E7%B3%BB%E5%9B%BE/9005309

用例圖 https://baike.baidu.com/item/%E7%94%A8%E4%BE%8B%E5%9B%BE/9531932?fr=aladdin

領域模型 https://baike.baidu.com/item/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/1022567?fr=aladdin

這些本質上是模型驅動開發的一種方法。如今不少公司和組織在研究一些更方便建模的工具。基於MDA(模型驅動架構)的工具涌現的比較多了,可是基本都是收費的。

在咱們團隊中,會用以文檔形式,裏面附加經常使用的圖的形式來作第一版方案的review。review完以後要進行可行性驗證,這種會用代碼創建一個demo版本。在這個階段,須要將完整的測試用例都補充完整,並測試經過。確保測試用例的正確性。開發階段,測試結果須要和建模階段的結果一致。

因此能夠理解爲demo版是一個帶有mock的粗糙開發版本。實際的開發階段是對demo版本的重構。由於demo版實際功能已經實現了,測試用例不須要有改變。這也符合Martin Fowler的《重構-改善既有代碼的設計》的思想。

 

總結

以提出問題爲驅動,以解決問題爲整合、用輸出倒逼輸入產品化。

 

推薦閱讀

程序經常使用的設計技巧

到底多大才算高併發?

美團分佈式服務通訊框架及服務治理系統OCTO

學會用數聽說話-分佈式鎖究竟能夠多少併發?

大話高可用

相關文章
相關標籤/搜索