DDD领域驱动设计---战略设计(包括四色原型建模)
????? 相當于策略設計,從宏觀角度著眼于領域的分析設計,屬于系統分析階段,注重如何從有界上下文中尋找領域模型,戰略模式由有界上下文、無所不在的語言和上下文映射組成。
???? 在戰略設計前首先要了解下領域知識、業務策略、業務規劃。
?????? 1、有界上下文:是指再空間或時間上有邊界的一段環境背景,它確定了每個模型的適用范圍,模型體現了這個范圍內的邏輯一致性。
?????? 2、統一語言:統一語言必須在領域模型中表達出來,主要體現在領域模型中的名稱上。不應只由業務專家或是其他單一職位定義,而應團隊人員共同商定。
?????? 3、上下文映射組成(上下文關系):
????????????? a、共享內核(例如兩個團隊共享一份類庫)此種方式很少用,耦合度太高。
????????????? b、開發主機服務也就是上下游關系映射或API調用,一個服務通過RPC等同步方式調用另一個上下文的API,這種目前比較普及。
????????????? c、發布\訂閱模式:一個發布,一個訂閱,只依賴事件或消息,使得兩者之間最大化松耦合。???
????????????? d、發布語言(Published Language):兩個有界上下文中的模型溝通的語言表達方式。例如XML,JSON
?????? 康威第一定理(Conways Law):組織性質決定架構。即系統架構代表實現系統的組織的溝通結構,對于軟件中的每個模塊,都對應有一個組織單元;組織單元之間存在溝通依賴,軟件中對應的模塊之間同樣存在依賴關系。
?????? 在領域(獨立的產品或是項目)中劃分{核心子域(業務策略和業務規則重點實施地),支持(輔助)子域,通用子域。}(具體的項目)每個域確定上下文(領域邊界)
?????? 最佳實踐:一個有界上下文對應一個子域,對應一個團隊,對應一個微服務。
?????? DDD建模基本上只需要三種UML圖:用例圖(表達需求用例)、序列圖(模擬領域中的邏輯流程,能夠記錄和驗證邏輯)、類圖(表達類與結構關系)。
劃清領域上下文的方法:
????? 1、通過領域故事(Domain Storytelling)的方式,專注于領域知識,通過領域語言來探索和理解用戶流程、工作程序和整體業務流程和規則。
???? 例如:問:“你的工作做什么的?”
??????????????? 答:“進行貨運計劃調度”
??????????????? 問:“具體怎么回事?”
??????????????? 答:“舉個例子,客戶需要托運一批貨物,然后需要讓路線小組規劃路線,機場小組再分配計劃,最后指定機位。”
??????????????? 這里“客戶需要托運一批貨物”主語是“客戶”,謂語動詞“托運”,賓語是“貨物”。可以使用不同顏色表示他們:黃色是主語,粉紅色表謂語,藍色表示賓語,具體顏色取決自己,也可參考下面的四色原型。
???? 2、還有填寫表格法和事件風暴會議發現有界上下文。
本環節最主要的就是劃清領域上下文。也是整個領域驅動設計的難點。
領域事件:事件代表過去發生完成的事,它既是業務架構概念也是技術架構概念,以事件為驅動的編程技術模型稱為事件驅動架構(EDA)。領域事件強調其業務概念。事件即指已經發生的事情,可以從動詞完成時理解。
命令:命令表示事件的觸發器。命令是請求,而事件是完成。命令相當于頁面(UI)點擊的按鈕來觸發一個需要完成的任務,這個完成的任務既是指一個事件。
命令命名和事件命名,命令命名相當于動詞結尾的ing,事件命名相當于結尾的ed。
關鍵事件:即指識別狀態機狀態之間轉換的事件,關鍵事件是領域邊界劃分的重要指標。
還有事件建模頭腦風暴法,這個也是工作中會使用的方法,但是這種方法一定要確定會議各階段目標,要不效率太低。
例如:首先,確定探索子域。
? ? ? ? ? ?2、確定探索有節上下文。
? ? ? ? ? ?3、確定用戶角色,那些角色發出那些命令,完成那些事件。
? ? ? ? ? ?4、確定關鍵測試場景。
????? 可參考四色原型建模:
????? 1、moment-interval(某個時刻(moment)或一段很短時間(interval)內. 意味在某個時刻發生的事情因為業務要求或合法性原因需要跟蹤;或者過一段時間以后,應該是很短的時間,可以幫助我們尋找到它。)
?????? 賣東西是在某個時刻發生的,它有發生日期和時間。租賃行為是在一段時間內發生,從開始出租和歸還所租物品;預定也是持續一段時間,什么時候預定;什么時候過期等。
這些我們都使用moment-interval原型來表達。Moment-intervals經常封裝的是最關鍵的方法,為讓其顯目,moment-interval的UML圖我們使用粉紅顏色表示
????? 2、role(角色原型比較容易理解,任何一個系統都需要人或某個組織介入運行,例如論壇系統需要注冊者角色發言;銷售訂單需要業務員角色制定,等等。)
?????? 這里有一個Party原型定義:它表示一個可標識、可定位的單元,這個單元有自己正常的狀態并且能夠自主控制自己的一些行為,通常情況下,人或組織是一種Party,但象護照,身份證等注冊性標志等都可以作為Party。
?????? Role角色是Party扮演的(a role that a Party plays),Party是角色Role的扮演者(role-player)。角色原型在UML中是使用黃顏色標識的。角色模型是第二重要的原型,所以使用黃色。
????? 3、description archetype
?????? 比如你的紅色福克斯是福特生產的一輛轎車,它有車牌號、購買日期、顏色和里程表等,這些代表Thing原型,那么作為轎車這個種類來說,它有一些種類屬性,例如:生產廠家、生產批號、適用顏色等,這些屬性是轎車這類所有車輛都共有的。
??????? 在設計模式這個實現級別,我們通常使用組合模式來實現種類原型。Description原型在UML中使用藍色表達。
????? 4、party, place or thing
???????? party place或thing都可以成為角色原型,注意到角色原型中的UML圖,party圖是以綠色表達。
????
總結
以上是生活随笔為你收集整理的DDD领域驱动设计---战略设计(包括四色原型建模)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDD领域驱动设计简介
- 下一篇: DDD领域驱动设计特点及难点