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