課程簡介
領(lǐng)域驅(qū)動設(shè)計案例實戰(zhàn)訓(xùn)練營建立了完整的領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程,圍繞著領(lǐng)域為核心驅(qū)動力,引入需求分析、架構(gòu)設(shè)計與領(lǐng)域建模的最佳實踐,在敏捷迭代開發(fā)模式的規(guī)范下,為團隊提供了一套規(guī)范而完整的參考過程體系,旨在解決需求分析與軟件設(shè)計的不一致問題,解決領(lǐng)域建模與程序?qū)崿F(xiàn)的不一致問題,控制業(yè)務(wù)復(fù)雜度與技術(shù)復(fù)雜度,為業(yè)務(wù)復(fù)雜的企業(yè)系統(tǒng)提供行之有效的設(shè)計解決方案。
目標收益
通過本次實戰(zhàn)訓(xùn)練營,可以實現(xiàn)以下目標收益:
1、理解和掌握領(lǐng)域驅(qū)動設(shè)計方法體系
2、深入分析面向?qū)ο笤O(shè)計知識與設(shè)計模式
3、需求分析與領(lǐng)域建模技術(shù)
4、戰(zhàn)略層面的軟件體系架構(gòu)設(shè)計以及微服務(wù)架構(gòu)設(shè)計
5、應(yīng)用服務(wù)、領(lǐng)域邏輯以及基礎(chǔ)設(shè)施的編程實現(xiàn)
培訓(xùn)對象
課程大綱
第一部分 領(lǐng)域驅(qū)動設(shè)計體系 |
以高屋建瓴的方式概括講解整個領(lǐng)域驅(qū)動設(shè)計體系,內(nèi)容包括: ?領(lǐng)域驅(qū)動設(shè)計體系基礎(chǔ) ?領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程 快速介紹和解讀由Eric Evans提出的領(lǐng)域驅(qū)動設(shè)計體系,了解該方法體系與軟件研發(fā)生命周期之間的關(guān)系,給出領(lǐng)域驅(qū)動設(shè)計提倡的研發(fā)過程,簡要介紹它的主要模式。 對比用例驅(qū)動的面向?qū)ο蠓治雠c設(shè)計方法、ICONIX方法,提煉經(jīng)典領(lǐng)域驅(qū)動設(shè)計體系存在的不足,結(jié)合講師豐富的項目經(jīng)驗與咨詢經(jīng)驗,提出領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程,包括需求分析、架構(gòu)設(shè)計與領(lǐng)域建模等內(nèi)容,并在領(lǐng)域驅(qū)動設(shè)計的指導(dǎo)原則下進行。 在領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程的指導(dǎo)下,我提出了由十二個步驟構(gòu)成的服務(wù)風(fēng)暴的平行模型,為固化領(lǐng)域驅(qū)動設(shè)計的過程提供了規(guī)范過程與指導(dǎo)原則。 案例分析 Apache OFBiz是一個開源的、基于J2EE和XML規(guī)范的框架,用于構(gòu)建大型企業(yè)級、跨平臺、跨數(shù)據(jù)庫、跨應(yīng)用服務(wù)器的多層、分布式電子商務(wù)類WEB應(yīng)用系統(tǒng)。OFBiz采用了MVC模式,并貫穿于業(yè)務(wù)層和數(shù)據(jù)層,是典型的采用數(shù)據(jù)驅(qū)動設(shè)計的軟件項目,廣泛采用了違背面向?qū)ο笤O(shè)計原則的貧血模型與事務(wù)腳本模式,這些實踐正是領(lǐng)域驅(qū)動設(shè)計要竭力避免的。 |
第二部分 全局分析階段 |
對整個項目進行業(yè)務(wù)的全局分析,內(nèi)容包括: ?統(tǒng)一語言 ?全局分析6W模型 ?業(yè)務(wù)流程分析 ?識別和編寫業(yè)務(wù)服務(wù) ?劃分子領(lǐng)域 ?業(yè)務(wù)架構(gòu) 統(tǒng)一語言是貫穿整個問題空間到解空間的重要模式,有利于領(lǐng)域?qū)<遗c開發(fā)團隊的共同協(xié)作,形成領(lǐng)域知識在整個團隊之間的傳遞。它也是全局分析階段最重要的業(yè)務(wù)知識分析基礎(chǔ),它與領(lǐng)域模型之間存在相輔相成的關(guān)系。 全局分析6W模型涵蓋了整個全局分析階段,了解該模型,可以幫助領(lǐng)域?qū)<?、團隊負責(zé)人與架構(gòu)師共同確定整個系統(tǒng)的問題空間,確定利益相關(guān)者、系統(tǒng)愿景和系統(tǒng)范圍,確定價值需求和業(yè)務(wù)需求之間的關(guān)系,梳理業(yè)務(wù)流程,識別業(yè)務(wù)服務(wù),建立反映整個系統(tǒng)的業(yè)務(wù)架構(gòu)。 業(yè)務(wù)服務(wù)是基本的業(yè)務(wù)分析單元,是全局分析階段的核心模式,也是識別子領(lǐng)域的主要輸入。本階段將主要圍繞業(yè)務(wù)服務(wù)展開講解、演練和分析,并通過實際案例對比了業(yè)務(wù)服務(wù)與用例之間的區(qū)別。 案例講解 對比WMS系統(tǒng)的“收貨”用例,說明業(yè)務(wù)服務(wù)與用例之間的區(qū)別,進而獲得對應(yīng)的業(yè)務(wù)服務(wù)圖,并按照規(guī)定格式編寫業(yè)務(wù)服務(wù)規(guī)約。 案例演練 識別購票業(yè)務(wù)流程的業(yè)務(wù)服務(wù) 模擬在鐵路12306APP的整個購票流程,根據(jù)業(yè)務(wù)服務(wù)的定義梳理出貫穿整個流程的所有業(yè)務(wù)服務(wù)。 識別技術(shù)部落的子領(lǐng)域 目標:搭建一個技術(shù)部落(TRIBE),將與IT、互聯(lián)網(wǎng)、數(shù)字領(lǐng)域相關(guān)的人、部落(業(yè)務(wù)、社區(qū)、興趣組等)和內(nèi)容聯(lián)系起來,提供一個分享與交流的途徑。在最基本的層面上,它是一個本地的博客、微博、微信文章、開源代碼、活動、講座、工作以及更多內(nèi)容的聚合器。 根據(jù)講師提供的業(yè)務(wù)服務(wù),按照服務(wù)風(fēng)暴的全局分析過程,演練如何正確地識別子領(lǐng)域,建立系統(tǒng)的業(yè)務(wù)架構(gòu)。 |
第三部分 架構(gòu)映射階段 |
在領(lǐng)域驅(qū)動的戰(zhàn)略設(shè)計階段,以領(lǐng)域為核心驅(qū)動力,以限界上下文為核心模式構(gòu)建面向領(lǐng)域的架構(gòu)體系,內(nèi)容包括: ?限界上下文 ?菱形對稱架構(gòu) ?上下文映射 ?系統(tǒng)上下文 ?領(lǐng)域驅(qū)動架構(gòu)風(fēng)格 結(jié)合軟件復(fù)雜度的本質(zhì)分析與軟件架構(gòu)的定義,剖析領(lǐng)域驅(qū)動設(shè)計對架構(gòu)戰(zhàn)略的應(yīng)對方式,引出戰(zhàn)略設(shè)計的核心模式——限界上下文。限界上下文作為業(yè)務(wù)能力的縱向切分、領(lǐng)域模型的知識語境,是響應(yīng)業(yè)務(wù)變化的關(guān)鍵架構(gòu)因素。由限界上下文之間的協(xié)作形成上下文映射,并根據(jù)領(lǐng)域驅(qū)動設(shè)計原則,建立以菱形對稱架構(gòu)與系統(tǒng)分層架構(gòu)為支撐的領(lǐng)域驅(qū)動架構(gòu)風(fēng)格。 架構(gòu)映射階段仍然遵循服務(wù)風(fēng)暴的設(shè)計過程,并以全局階段輸出的業(yè)務(wù)架構(gòu)為主要輸入,獲得限界上下文組件圖、服務(wù)序列圖以及遵循菱形對稱架構(gòu)和系統(tǒng)分層架構(gòu)的應(yīng)用架構(gòu),完成從業(yè)務(wù)架構(gòu)到應(yīng)用架構(gòu)的映射。 案例分析 全球地面航班保障平臺是某航空公司的核心系統(tǒng)建設(shè)目標,在設(shè)計該系統(tǒng)的整個解決方案時,運用了領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程,實現(xiàn)了從業(yè)務(wù)架構(gòu)向應(yīng)用架構(gòu)的映射,包括通過業(yè)務(wù)服務(wù)識別限界上下文的映射過程,通過服務(wù)序列圖確定上下文映射模式,定義服務(wù)契約,獲得整個系統(tǒng)的邏輯架構(gòu),然后針對客戶案例指導(dǎo)團隊進行架構(gòu)設(shè)計,輸出實踐結(jié)果。 案例演練 以全局分析階段輸出的技術(shù)部落業(yè)務(wù)架構(gòu)為輸入,開展架構(gòu)映射工作坊,結(jié)合講師給出的識別限界上下文的檢查項(checklist)對組成業(yè)務(wù)架構(gòu)的業(yè)務(wù)子域做進一步調(diào)整,將其映射為限界上下文,然后,根據(jù)講師給出的“報名活動”業(yè)務(wù)服務(wù)規(guī)約,繪制服務(wù)序列圖,推導(dǎo)出多個限界上下文之間的協(xié)作關(guān)系,定義API契約,并繪制出限界上下文組件圖,最終得到整個系統(tǒng)的應(yīng)用架構(gòu)。 |
第四部分 領(lǐng)域建模階段 |
以業(yè)務(wù)服務(wù)為建模核心開展領(lǐng)域模型驅(qū)動設(shè)計,是保證領(lǐng)域驅(qū)動設(shè)計落地的重要條件,內(nèi)容包括: ?領(lǐng)域分析建模 ?領(lǐng)域設(shè)計建模 ?領(lǐng)域?qū)崿F(xiàn)建模 在限界上下文的知識邊界內(nèi)分析領(lǐng)域邏輯,提煉領(lǐng)域概念,在統(tǒng)一語言的指導(dǎo)下迭代地進行領(lǐng)域建模,包括建立清晰表達了領(lǐng)域概念的領(lǐng)域分析模型,與以聚合為核心要素的領(lǐng)域設(shè)計模型,通過服務(wù)驅(qū)動設(shè)計確定每個領(lǐng)域模型對象的職責(zé),并順利地引導(dǎo)到領(lǐng)域?qū)崿F(xiàn)建模,以測試驅(qū)動開發(fā)的流程編寫領(lǐng)域?qū)崿F(xiàn)代碼與測試代碼。 領(lǐng)域建模階段需要掌握或了解如下方法: ?快速建模法 ?角色構(gòu)造型 ?聚合的設(shè)計 ?服務(wù)驅(qū)動設(shè)計 ?測試驅(qū)動開發(fā) 整個建模階段的輸入是業(yè)務(wù)服務(wù)規(guī)約,而作為應(yīng)用架構(gòu)組成元素的限界上下文則規(guī)定了領(lǐng)域模型的邊界。領(lǐng)域模型分為由聚合組成的靜態(tài)領(lǐng)域模型和由序列圖組成的動態(tài)領(lǐng)域模型,并由服務(wù)驅(qū)動設(shè)計將這些知識和方法串聯(lián)起來。 案例分析 展示信用卡分期系統(tǒng)/EAS系統(tǒng)的領(lǐng)域建模過程,包括通過快速建模法獲得領(lǐng)域分析模型,建立以聚合為基本設(shè)計單元的領(lǐng)域設(shè)計模型,服務(wù)驅(qū)動設(shè)計獲得的序列圖腳本,并展示如何通過測試驅(qū)動開發(fā)進行領(lǐng)域?qū)崿F(xiàn)建模,然后針對客戶案例指導(dǎo)團隊進行領(lǐng)域建模,最終輸出由文本、圖與代碼構(gòu)成的領(lǐng)域模型。 案例講解 超市收銀業(yè)務(wù)場景的模型演進 領(lǐng)域驅(qū)動設(shè)計的建模基礎(chǔ)是面向?qū)ο蠓治雠c設(shè)計,通過超市收銀業(yè)務(wù)場景的模型演進,幫助學(xué)員進一步理解面向?qū)ο笤O(shè)計的基本原則,并在良好的面向?qū)ο笤O(shè)計基礎(chǔ)之上,演示領(lǐng)域驅(qū)動設(shè)計對面向?qū)ο笤O(shè)計的增強。 結(jié)算系統(tǒng)領(lǐng)域建模設(shè)計的改進 在?個結(jié)算系統(tǒng)中,業(yè)務(wù)需求要求能夠?qū)?各種結(jié)算賬單的Excel模板?件,然后通過具體的值填充這些報表模板,?成最終客戶需要的Excel報表。團隊采用經(jīng)典的領(lǐng)域驅(qū)動設(shè)計過程,針對該業(yè)務(wù)場景獲得了領(lǐng)域模型以及相應(yīng)代碼。然而,設(shè)計獲得的領(lǐng)域模型體現(xiàn)了設(shè)計者對領(lǐng)域驅(qū)動設(shè)計的認識偏差。本案例演示了如何通過對正確地概念理解逐步改進整個模型的設(shè)計。 批量代付業(yè)務(wù)的領(lǐng)域建模 通過為批量代付業(yè)務(wù)定義和識別正確的業(yè)務(wù)服務(wù),講解從領(lǐng)域分析建模到領(lǐng)域設(shè)計建模、領(lǐng)域?qū)崿F(xiàn)建模的全過程。 案例演練 在架構(gòu)映射階段獲得應(yīng)用架構(gòu)基礎(chǔ)上,選擇“報名活動”等三個業(yè)務(wù)服務(wù),利用快速建模法迅速獲得領(lǐng)域分析模型,并識別出以聚合為核心的靜態(tài)設(shè)計模型,然后開展服務(wù)驅(qū)動設(shè)計,獲得序列圖腳本,為進一步的測試驅(qū)動設(shè)計提供重要的設(shè)計輸入。 |
第五部分 領(lǐng)域驅(qū)動設(shè)計的發(fā)展 |
領(lǐng)域驅(qū)動設(shè)計自2003年誕生一來,隨著架構(gòu)師與研發(fā)團隊對它的認識愈發(fā)深入,又經(jīng)過社區(qū)的不斷推動,整個方法體系得到了不斷地補充與完善,并將其運用到更加廣泛的領(lǐng)域,這些內(nèi)容包括: ?事件風(fēng)暴 ?事件溯源 ?微服務(wù) 事件風(fēng)暴是一種提倡高度協(xié)作的可視化建模方法,可以通過它開展全局分析,在團隊內(nèi)部建立統(tǒng)一語言,探索業(yè)務(wù)全景,并建立領(lǐng)域分析模型,整個探索過程包括: ?識別代表業(yè)務(wù)全景的領(lǐng)域事件 ?標記代表問題、重要關(guān)注點的熱點 ?為每個領(lǐng)域事件識別參與者 ?識別限界上下文 ?確定上下文映射 ?在限界上下文內(nèi)部定義領(lǐng)域分析模型 事件溯源(Event Sourcing)模式是為事件建模范式提供的設(shè)計模式,其中,領(lǐng)域事件與聚合成為領(lǐng)域設(shè)計模型的核心要素,在編程范式上與經(jīng)典的領(lǐng)域驅(qū)動設(shè)計存在較大區(qū)別。本部分內(nèi)容為講解: ?領(lǐng)域事件的定義 ?面向聚合的事件溯源 ?命令查詢職責(zé)分離(CQRS)架構(gòu)模式 ?事件驅(qū)動架構(gòu)的發(fā)展與變化 微服務(wù)模式能夠更好地契合云原生應(yīng)用的架構(gòu),而領(lǐng)域驅(qū)動設(shè)計又為微服務(wù)的設(shè)計提供系統(tǒng)型指導(dǎo),如引入限界上下文作為微服務(wù)的設(shè)計邊界,我提出的菱形對稱架構(gòu)能夠更好地管理和控制微服務(wù)之間的協(xié)作機制,并有助于針對單體系統(tǒng)到微服務(wù)系統(tǒng)的演進與重構(gòu)。本部分內(nèi)容講解: ?微服務(wù)的架構(gòu)特征 ?限界上下文與微服務(wù) ?絞殺者模式與微服務(wù)重構(gòu) 案例講解 運用事件風(fēng)暴分析訂單業(yè)務(wù)流程 以電子商務(wù)的典型訂單流程,運用事件風(fēng)暴驅(qū)動對事件的識別,幫助理解如何在實際項目中運用事件風(fēng)暴,掌握事件風(fēng)暴工作坊的設(shè)計要點和設(shè)計要素。 庫存管理系統(tǒng)從單體到微服務(wù)架構(gòu) 某零售商核心系統(tǒng)——庫存管理系統(tǒng)是一個基于.NET開發(fā)的單數(shù)據(jù)庫單體系統(tǒng),隨著門店的不斷增加,該系統(tǒng)越來越不能滿足用戶、商品和訂單增長的需求,企業(yè)在數(shù)字化建設(shè)的要求下,運用了領(lǐng)域驅(qū)動設(shè)計方法結(jié)合絞殺者模式完成了從單體到微服務(wù)架構(gòu)的平滑升級。 案例演練 為學(xué)課堂 作為一個e-learning系統(tǒng),覆蓋從選課、診斷、試卷、批改、報名、支付、售后全流程,組織學(xué)員開展事件風(fēng)暴工作坊,內(nèi)容覆蓋領(lǐng)域驅(qū)動的戰(zhàn)略設(shè)計和戰(zhàn)術(shù)設(shè)計,并以微服務(wù)架構(gòu)設(shè)計為學(xué)課堂的整體架構(gòu),嘗試運用事件驅(qū)動架構(gòu)控制微服務(wù)之間的協(xié)作。 |
第六部分 領(lǐng)域驅(qū)動設(shè)計的價值 |
領(lǐng)域驅(qū)動設(shè)計作為一套完整地覆蓋需求分析、架構(gòu)設(shè)計到編碼實現(xiàn)的軟件工程設(shè)計方法,它的價值主要體現(xiàn)在: ?完整而統(tǒng)一的設(shè)計過程和模式 ?追求高質(zhì)量設(shè)計與編碼的領(lǐng)域驅(qū)動設(shè)計架構(gòu)風(fēng)格 ?通過分而治之控制業(yè)務(wù)復(fù)雜度與技術(shù)復(fù)雜度 ?設(shè)計原則和模式稱為團隊共同遵守的研發(fā)紀律 以領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程和服務(wù)風(fēng)暴的平行模型進一步總結(jié)領(lǐng)域驅(qū)動設(shè)計的重要內(nèi)容,并推導(dǎo)出成功應(yīng)用領(lǐng)域驅(qū)動設(shè)計的兩大要素: ?邊界是核心 ?紀律是關(guān)鍵 本部分培訓(xùn)內(nèi)容還總結(jié)了領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程三個階段的主要交付物,并整理了運用領(lǐng)域驅(qū)動設(shè)計的常見反模式,通過對比這些不好的設(shè)計,進一步了解該如何正確地運用領(lǐng)域驅(qū)動設(shè)計。 |
第一部分 領(lǐng)域驅(qū)動設(shè)計體系 以高屋建瓴的方式概括講解整個領(lǐng)域驅(qū)動設(shè)計體系,內(nèi)容包括: ?領(lǐng)域驅(qū)動設(shè)計體系基礎(chǔ) ?領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程 快速介紹和解讀由Eric Evans提出的領(lǐng)域驅(qū)動設(shè)計體系,了解該方法體系與軟件研發(fā)生命周期之間的關(guān)系,給出領(lǐng)域驅(qū)動設(shè)計提倡的研發(fā)過程,簡要介紹它的主要模式。 對比用例驅(qū)動的面向?qū)ο蠓治雠c設(shè)計方法、ICONIX方法,提煉經(jīng)典領(lǐng)域驅(qū)動設(shè)計體系存在的不足,結(jié)合講師豐富的項目經(jīng)驗與咨詢經(jīng)驗,提出領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程,包括需求分析、架構(gòu)設(shè)計與領(lǐng)域建模等內(nèi)容,并在領(lǐng)域驅(qū)動設(shè)計的指導(dǎo)原則下進行。 在領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程的指導(dǎo)下,我提出了由十二個步驟構(gòu)成的服務(wù)風(fēng)暴的平行模型,為固化領(lǐng)域驅(qū)動設(shè)計的過程提供了規(guī)范過程與指導(dǎo)原則。 案例分析 Apache OFBiz是一個開源的、基于J2EE和XML規(guī)范的框架,用于構(gòu)建大型企業(yè)級、跨平臺、跨數(shù)據(jù)庫、跨應(yīng)用服務(wù)器的多層、分布式電子商務(wù)類WEB應(yīng)用系統(tǒng)。OFBiz采用了MVC模式,并貫穿于業(yè)務(wù)層和數(shù)據(jù)層,是典型的采用數(shù)據(jù)驅(qū)動設(shè)計的軟件項目,廣泛采用了違背面向?qū)ο笤O(shè)計原則的貧血模型與事務(wù)腳本模式,這些實踐正是領(lǐng)域驅(qū)動設(shè)計要竭力避免的。 |
第二部分 全局分析階段 對整個項目進行業(yè)務(wù)的全局分析,內(nèi)容包括: ?統(tǒng)一語言 ?全局分析6W模型 ?業(yè)務(wù)流程分析 ?識別和編寫業(yè)務(wù)服務(wù) ?劃分子領(lǐng)域 ?業(yè)務(wù)架構(gòu) 統(tǒng)一語言是貫穿整個問題空間到解空間的重要模式,有利于領(lǐng)域?qū)<遗c開發(fā)團隊的共同協(xié)作,形成領(lǐng)域知識在整個團隊之間的傳遞。它也是全局分析階段最重要的業(yè)務(wù)知識分析基礎(chǔ),它與領(lǐng)域模型之間存在相輔相成的關(guān)系。 全局分析6W模型涵蓋了整個全局分析階段,了解該模型,可以幫助領(lǐng)域?qū)<?、團隊負責(zé)人與架構(gòu)師共同確定整個系統(tǒng)的問題空間,確定利益相關(guān)者、系統(tǒng)愿景和系統(tǒng)范圍,確定價值需求和業(yè)務(wù)需求之間的關(guān)系,梳理業(yè)務(wù)流程,識別業(yè)務(wù)服務(wù),建立反映整個系統(tǒng)的業(yè)務(wù)架構(gòu)。 業(yè)務(wù)服務(wù)是基本的業(yè)務(wù)分析單元,是全局分析階段的核心模式,也是識別子領(lǐng)域的主要輸入。本階段將主要圍繞業(yè)務(wù)服務(wù)展開講解、演練和分析,并通過實際案例對比了業(yè)務(wù)服務(wù)與用例之間的區(qū)別。 案例講解 對比WMS系統(tǒng)的“收貨”用例,說明業(yè)務(wù)服務(wù)與用例之間的區(qū)別,進而獲得對應(yīng)的業(yè)務(wù)服務(wù)圖,并按照規(guī)定格式編寫業(yè)務(wù)服務(wù)規(guī)約。 案例演練 識別購票業(yè)務(wù)流程的業(yè)務(wù)服務(wù) 模擬在鐵路12306APP的整個購票流程,根據(jù)業(yè)務(wù)服務(wù)的定義梳理出貫穿整個流程的所有業(yè)務(wù)服務(wù)。 識別技術(shù)部落的子領(lǐng)域 目標:搭建一個技術(shù)部落(TRIBE),將與IT、互聯(lián)網(wǎng)、數(shù)字領(lǐng)域相關(guān)的人、部落(業(yè)務(wù)、社區(qū)、興趣組等)和內(nèi)容聯(lián)系起來,提供一個分享與交流的途徑。在最基本的層面上,它是一個本地的博客、微博、微信文章、開源代碼、活動、講座、工作以及更多內(nèi)容的聚合器。 根據(jù)講師提供的業(yè)務(wù)服務(wù),按照服務(wù)風(fēng)暴的全局分析過程,演練如何正確地識別子領(lǐng)域,建立系統(tǒng)的業(yè)務(wù)架構(gòu)。 |
第三部分 架構(gòu)映射階段 在領(lǐng)域驅(qū)動的戰(zhàn)略設(shè)計階段,以領(lǐng)域為核心驅(qū)動力,以限界上下文為核心模式構(gòu)建面向領(lǐng)域的架構(gòu)體系,內(nèi)容包括: ?限界上下文 ?菱形對稱架構(gòu) ?上下文映射 ?系統(tǒng)上下文 ?領(lǐng)域驅(qū)動架構(gòu)風(fēng)格 結(jié)合軟件復(fù)雜度的本質(zhì)分析與軟件架構(gòu)的定義,剖析領(lǐng)域驅(qū)動設(shè)計對架構(gòu)戰(zhàn)略的應(yīng)對方式,引出戰(zhàn)略設(shè)計的核心模式——限界上下文。限界上下文作為業(yè)務(wù)能力的縱向切分、領(lǐng)域模型的知識語境,是響應(yīng)業(yè)務(wù)變化的關(guān)鍵架構(gòu)因素。由限界上下文之間的協(xié)作形成上下文映射,并根據(jù)領(lǐng)域驅(qū)動設(shè)計原則,建立以菱形對稱架構(gòu)與系統(tǒng)分層架構(gòu)為支撐的領(lǐng)域驅(qū)動架構(gòu)風(fēng)格。 架構(gòu)映射階段仍然遵循服務(wù)風(fēng)暴的設(shè)計過程,并以全局階段輸出的業(yè)務(wù)架構(gòu)為主要輸入,獲得限界上下文組件圖、服務(wù)序列圖以及遵循菱形對稱架構(gòu)和系統(tǒng)分層架構(gòu)的應(yīng)用架構(gòu),完成從業(yè)務(wù)架構(gòu)到應(yīng)用架構(gòu)的映射。 案例分析 全球地面航班保障平臺是某航空公司的核心系統(tǒng)建設(shè)目標,在設(shè)計該系統(tǒng)的整個解決方案時,運用了領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程,實現(xiàn)了從業(yè)務(wù)架構(gòu)向應(yīng)用架構(gòu)的映射,包括通過業(yè)務(wù)服務(wù)識別限界上下文的映射過程,通過服務(wù)序列圖確定上下文映射模式,定義服務(wù)契約,獲得整個系統(tǒng)的邏輯架構(gòu),然后針對客戶案例指導(dǎo)團隊進行架構(gòu)設(shè)計,輸出實踐結(jié)果。 案例演練 以全局分析階段輸出的技術(shù)部落業(yè)務(wù)架構(gòu)為輸入,開展架構(gòu)映射工作坊,結(jié)合講師給出的識別限界上下文的檢查項(checklist)對組成業(yè)務(wù)架構(gòu)的業(yè)務(wù)子域做進一步調(diào)整,將其映射為限界上下文,然后,根據(jù)講師給出的“報名活動”業(yè)務(wù)服務(wù)規(guī)約,繪制服務(wù)序列圖,推導(dǎo)出多個限界上下文之間的協(xié)作關(guān)系,定義API契約,并繪制出限界上下文組件圖,最終得到整個系統(tǒng)的應(yīng)用架構(gòu)。 |
第四部分 領(lǐng)域建模階段 以業(yè)務(wù)服務(wù)為建模核心開展領(lǐng)域模型驅(qū)動設(shè)計,是保證領(lǐng)域驅(qū)動設(shè)計落地的重要條件,內(nèi)容包括: ?領(lǐng)域分析建模 ?領(lǐng)域設(shè)計建模 ?領(lǐng)域?qū)崿F(xiàn)建模 在限界上下文的知識邊界內(nèi)分析領(lǐng)域邏輯,提煉領(lǐng)域概念,在統(tǒng)一語言的指導(dǎo)下迭代地進行領(lǐng)域建模,包括建立清晰表達了領(lǐng)域概念的領(lǐng)域分析模型,與以聚合為核心要素的領(lǐng)域設(shè)計模型,通過服務(wù)驅(qū)動設(shè)計確定每個領(lǐng)域模型對象的職責(zé),并順利地引導(dǎo)到領(lǐng)域?qū)崿F(xiàn)建模,以測試驅(qū)動開發(fā)的流程編寫領(lǐng)域?qū)崿F(xiàn)代碼與測試代碼。 領(lǐng)域建模階段需要掌握或了解如下方法: ?快速建模法 ?角色構(gòu)造型 ?聚合的設(shè)計 ?服務(wù)驅(qū)動設(shè)計 ?測試驅(qū)動開發(fā) 整個建模階段的輸入是業(yè)務(wù)服務(wù)規(guī)約,而作為應(yīng)用架構(gòu)組成元素的限界上下文則規(guī)定了領(lǐng)域模型的邊界。領(lǐng)域模型分為由聚合組成的靜態(tài)領(lǐng)域模型和由序列圖組成的動態(tài)領(lǐng)域模型,并由服務(wù)驅(qū)動設(shè)計將這些知識和方法串聯(lián)起來。 案例分析 展示信用卡分期系統(tǒng)/EAS系統(tǒng)的領(lǐng)域建模過程,包括通過快速建模法獲得領(lǐng)域分析模型,建立以聚合為基本設(shè)計單元的領(lǐng)域設(shè)計模型,服務(wù)驅(qū)動設(shè)計獲得的序列圖腳本,并展示如何通過測試驅(qū)動開發(fā)進行領(lǐng)域?qū)崿F(xiàn)建模,然后針對客戶案例指導(dǎo)團隊進行領(lǐng)域建模,最終輸出由文本、圖與代碼構(gòu)成的領(lǐng)域模型。 案例講解 超市收銀業(yè)務(wù)場景的模型演進 領(lǐng)域驅(qū)動設(shè)計的建?;A(chǔ)是面向?qū)ο蠓治雠c設(shè)計,通過超市收銀業(yè)務(wù)場景的模型演進,幫助學(xué)員進一步理解面向?qū)ο笤O(shè)計的基本原則,并在良好的面向?qū)ο笤O(shè)計基礎(chǔ)之上,演示領(lǐng)域驅(qū)動設(shè)計對面向?qū)ο笤O(shè)計的增強。 結(jié)算系統(tǒng)領(lǐng)域建模設(shè)計的改進 在?個結(jié)算系統(tǒng)中,業(yè)務(wù)需求要求能夠?qū)?各種結(jié)算賬單的Excel模板?件,然后通過具體的值填充這些報表模板,?成最終客戶需要的Excel報表。團隊采用經(jīng)典的領(lǐng)域驅(qū)動設(shè)計過程,針對該業(yè)務(wù)場景獲得了領(lǐng)域模型以及相應(yīng)代碼。然而,設(shè)計獲得的領(lǐng)域模型體現(xiàn)了設(shè)計者對領(lǐng)域驅(qū)動設(shè)計的認識偏差。本案例演示了如何通過對正確地概念理解逐步改進整個模型的設(shè)計。 批量代付業(yè)務(wù)的領(lǐng)域建模 通過為批量代付業(yè)務(wù)定義和識別正確的業(yè)務(wù)服務(wù),講解從領(lǐng)域分析建模到領(lǐng)域設(shè)計建模、領(lǐng)域?qū)崿F(xiàn)建模的全過程。 案例演練 在架構(gòu)映射階段獲得應(yīng)用架構(gòu)基礎(chǔ)上,選擇“報名活動”等三個業(yè)務(wù)服務(wù),利用快速建模法迅速獲得領(lǐng)域分析模型,并識別出以聚合為核心的靜態(tài)設(shè)計模型,然后開展服務(wù)驅(qū)動設(shè)計,獲得序列圖腳本,為進一步的測試驅(qū)動設(shè)計提供重要的設(shè)計輸入。 |
第五部分 領(lǐng)域驅(qū)動設(shè)計的發(fā)展 領(lǐng)域驅(qū)動設(shè)計自2003年誕生一來,隨著架構(gòu)師與研發(fā)團隊對它的認識愈發(fā)深入,又經(jīng)過社區(qū)的不斷推動,整個方法體系得到了不斷地補充與完善,并將其運用到更加廣泛的領(lǐng)域,這些內(nèi)容包括: ?事件風(fēng)暴 ?事件溯源 ?微服務(wù) 事件風(fēng)暴是一種提倡高度協(xié)作的可視化建模方法,可以通過它開展全局分析,在團隊內(nèi)部建立統(tǒng)一語言,探索業(yè)務(wù)全景,并建立領(lǐng)域分析模型,整個探索過程包括: ?識別代表業(yè)務(wù)全景的領(lǐng)域事件 ?標記代表問題、重要關(guān)注點的熱點 ?為每個領(lǐng)域事件識別參與者 ?識別限界上下文 ?確定上下文映射 ?在限界上下文內(nèi)部定義領(lǐng)域分析模型 事件溯源(Event Sourcing)模式是為事件建模范式提供的設(shè)計模式,其中,領(lǐng)域事件與聚合成為領(lǐng)域設(shè)計模型的核心要素,在編程范式上與經(jīng)典的領(lǐng)域驅(qū)動設(shè)計存在較大區(qū)別。本部分內(nèi)容為講解: ?領(lǐng)域事件的定義 ?面向聚合的事件溯源 ?命令查詢職責(zé)分離(CQRS)架構(gòu)模式 ?事件驅(qū)動架構(gòu)的發(fā)展與變化 微服務(wù)模式能夠更好地契合云原生應(yīng)用的架構(gòu),而領(lǐng)域驅(qū)動設(shè)計又為微服務(wù)的設(shè)計提供系統(tǒng)型指導(dǎo),如引入限界上下文作為微服務(wù)的設(shè)計邊界,我提出的菱形對稱架構(gòu)能夠更好地管理和控制微服務(wù)之間的協(xié)作機制,并有助于針對單體系統(tǒng)到微服務(wù)系統(tǒng)的演進與重構(gòu)。本部分內(nèi)容講解: ?微服務(wù)的架構(gòu)特征 ?限界上下文與微服務(wù) ?絞殺者模式與微服務(wù)重構(gòu) 案例講解 運用事件風(fēng)暴分析訂單業(yè)務(wù)流程 以電子商務(wù)的典型訂單流程,運用事件風(fēng)暴驅(qū)動對事件的識別,幫助理解如何在實際項目中運用事件風(fēng)暴,掌握事件風(fēng)暴工作坊的設(shè)計要點和設(shè)計要素。 庫存管理系統(tǒng)從單體到微服務(wù)架構(gòu) 某零售商核心系統(tǒng)——庫存管理系統(tǒng)是一個基于.NET開發(fā)的單數(shù)據(jù)庫單體系統(tǒng),隨著門店的不斷增加,該系統(tǒng)越來越不能滿足用戶、商品和訂單增長的需求,企業(yè)在數(shù)字化建設(shè)的要求下,運用了領(lǐng)域驅(qū)動設(shè)計方法結(jié)合絞殺者模式完成了從單體到微服務(wù)架構(gòu)的平滑升級。 案例演練 為學(xué)課堂 作為一個e-learning系統(tǒng),覆蓋從選課、診斷、試卷、批改、報名、支付、售后全流程,組織學(xué)員開展事件風(fēng)暴工作坊,內(nèi)容覆蓋領(lǐng)域驅(qū)動的戰(zhàn)略設(shè)計和戰(zhàn)術(shù)設(shè)計,并以微服務(wù)架構(gòu)設(shè)計為學(xué)課堂的整體架構(gòu),嘗試運用事件驅(qū)動架構(gòu)控制微服務(wù)之間的協(xié)作。 |
第六部分 領(lǐng)域驅(qū)動設(shè)計的價值 領(lǐng)域驅(qū)動設(shè)計作為一套完整地覆蓋需求分析、架構(gòu)設(shè)計到編碼實現(xiàn)的軟件工程設(shè)計方法,它的價值主要體現(xiàn)在: ?完整而統(tǒng)一的設(shè)計過程和模式 ?追求高質(zhì)量設(shè)計與編碼的領(lǐng)域驅(qū)動設(shè)計架構(gòu)風(fēng)格 ?通過分而治之控制業(yè)務(wù)復(fù)雜度與技術(shù)復(fù)雜度 ?設(shè)計原則和模式稱為團隊共同遵守的研發(fā)紀律 以領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程和服務(wù)風(fēng)暴的平行模型進一步總結(jié)領(lǐng)域驅(qū)動設(shè)計的重要內(nèi)容,并推導(dǎo)出成功應(yīng)用領(lǐng)域驅(qū)動設(shè)計的兩大要素: ?邊界是核心 ?紀律是關(guān)鍵 本部分培訓(xùn)內(nèi)容還總結(jié)了領(lǐng)域驅(qū)動設(shè)計統(tǒng)一過程三個階段的主要交付物,并整理了運用領(lǐng)域驅(qū)動設(shè)計的常見反模式,通過對比這些不好的設(shè)計,進一步了解該如何正確地運用領(lǐng)域驅(qū)動設(shè)計。 |