別再用DDD誤導你的架構設計了
點擊藍字 關注我們
Domain-Driven Design(DDD) 領域驅動設計在2004年就被Eric Evans 提出。幾年后,他的著作《領域驅動設計》中文版出版,在軟件設計領域引起極大的反響,被無數架構師奉為架構設計寶典。
在書中,Evans將領域驅動設計分為兩個階段:以一種領域專家、設計人員、開發(fā)人員都能理解的通用語言作為相互交流的工具,在交流的過程中發(fā)現領域概念,然后將這些概念設計成一個領域模型。由領域模型驅動軟件設計,用代碼來實現該領域模型。由此可見,領域驅動設計的核心是建立正確的領域模型。
區(qū)別于其他模型,領域模型的核心關鍵是建立一個領域并開展建模工作。但是,在現實商業(yè)業(yè)務中,沒有業(yè)務的全局觀領域就無從談起。特別是面向企業(yè)數字化建設過程中,比領域模型更重要的是業(yè)務模型。業(yè)務建模才是架構設計的起點和重中之重。
什么是業(yè)務建模
對于大部分的企業(yè)和業(yè)務而言,部門或者單一業(yè)務級的軟件應用已經不再是難題。但是,整合內部各業(yè)務之間,解決業(yè)務全生命周期的數字化系統是企業(yè)數字化轉型或建設中面臨的重要課題。
企業(yè)經營活動的開展,一般會面臨市場環(huán)境、企業(yè)目標、人員組織、生產流程、銷售服務等一系列的問題。其中任何一個環(huán)節(jié)沒有解決好,哪怕是一次客戶投訴處理不當,都能影響整個業(yè)務成敗。在相對成熟的業(yè)務中,這些要素經過沉淀,更是擁有自己獨特的運行規(guī)律。
面對如此復雜的因素,數字化建設要想成功難度可想而知。眾所周知,數字化轉型并非一蹴而就的顛覆式業(yè)務創(chuàng)新。它是在現有業(yè)務基礎上,逐步實現全域的信息化和數據沉淀。因此,充分了解現有業(yè)務,并進行梳理、優(yōu)化從而建立數字化的業(yè)務模型才是數字化建設的第一步。
業(yè)務建模(Business Modeling)是以軟件模型方式描述企業(yè)管理和業(yè)務所涉及的對象和要素、以及它們的屬性、行為和彼此關系。它強調以體系的方式來理解、設計和構架企業(yè)信息系統。
如果說,DDD是設計建造艦載機的過程方法,那么業(yè)務建模則是建造航母前的首要任務。
業(yè)務建模的目的和內容
正是因為經營業(yè)務中存在如此多的影響因素,在數字化業(yè)務設計中才需要利用業(yè)務建模的方法進行全方位的模型建設。
業(yè)務建模的目的是導出目標業(yè)務所需要的系統需求。在企業(yè)數字化建設中,目標業(yè)務是發(fā)生在一個企業(yè)組織內部,因此了解企業(yè)的組織結構和機制是業(yè)務建模的第一步。除此以外,了解組織的業(yè)務發(fā)生過程中存在的問題并確定改進的可能性,是業(yè)務建模極其關鍵的一個過程。
客戶需求與設計、上線結果存在偏差甚至鴻溝,這種情況時有發(fā)生。每個階段都會有新的橋段來嘲諷這種現象的發(fā)生,最近出現是下面的版本。

作為從業(yè)務場景向研發(fā)場景傳遞需求的過程,業(yè)務建模還有一個重要的目的就是確??蛻?、用戶和開發(fā)人員達成需求共識。
基于以上目的,業(yè)務建模的主要內容包括業(yè)務組織建模、業(yè)務流程建模以及領域建模。相比于傳統的軟件分析設計方法,業(yè)務建模是以面向對象的方法作為工作基礎。
業(yè)務建模相關的工作成果包括業(yè)務體系結構文檔,補充業(yè)務規(guī)范,業(yè)務規(guī)則和業(yè)務詞匯表。
業(yè)務建模的方法
業(yè)務建模的過程包含以下幾個方面:


建模過程的幾個基本元素包括:業(yè)務執(zhí)行者、業(yè)務實體、業(yè)務用例、業(yè)務工人、業(yè)務用例實例。其中,業(yè)務執(zhí)行者是指與系統交互的人的抽象類。業(yè)務實體只執(zhí)行者訪問、檢查、操作、產生的對象。業(yè)務用例是業(yè)務執(zhí)行的動作序列,并產生一個對特定業(yè)務參與者有價值的結果。
業(yè)務模型建立的基本過程,如下:

過程中最關鍵的識別業(yè)務用例實例和識別執(zhí)行者。業(yè)務用例實例是在業(yè)務中執(zhí)行的一系列動作,這些動作為業(yè)務的個體主角產生具有可見價值的結果。業(yè)務用例就是看業(yè)務為業(yè)務執(zhí)行者提供了哪些價值。業(yè)務執(zhí)行者達標了與業(yè)務有關的角色,此角色由業(yè)務環(huán)境中的某個人或系統來擔任。識別業(yè)務執(zhí)行者的過程就是識別誰在業(yè)務之外和業(yè)務打交道。
下圖是業(yè)務建模中常見的用例圖,是銀行部分業(yè)務中的業(yè)務執(zhí)行者和業(yè)務用例,以及他們之間的關系。

有了業(yè)務執(zhí)行者和業(yè)務用例,建模剩下的工作就是描述業(yè)務如何工作的,也就是業(yè)務用例實現。在下圖中,描述了一組向客戶提供茶服務的業(yè)務用例實現。

至此,簡單的業(yè)務模型就建立完成了。
可以看到,在用業(yè)務建模的方式重新描述業(yè)務的過程中,了解業(yè)務,發(fā)現業(yè)務新的機會以及用業(yè)務模型語言表達出來是關鍵的幾個步驟?;跇I(yè)務模型,再進行下一步的設計、實現架構設計以及開發(fā)實現就會變得清晰可行。
而領域驅動設計中的領域模型只是業(yè)務建模過程中一種簡化認知,知識消化的方法。
關注我們,更懂架構設計
