?一、 課程簡(jiǎn)介
現(xiàn)在是一個(gè)快速變化的時(shí)代,我們不得不面對(duì)激烈的競(jìng)爭(zhēng)和快速的市場(chǎng)變化。快速的變化,帶來軟件需求的快速變革。因此,所有的軟件企業(yè)不得不面對(duì)這樣一個(gè)事實(shí):當(dāng)軟件系統(tǒng)經(jīng)歷了無數(shù)次變更以后,程序變得凌亂不堪、難于維護(hù)。而軟件經(jīng)過了無數(shù)次變更以后,系統(tǒng)的業(yè)務(wù)邏輯變得越來越復(fù)雜,我們的設(shè)計(jì)開始迷失方向。這種設(shè)計(jì)的迷失,加快了軟件退化的速度,使得任何一個(gè)變更,都變得成本巨大。這就是現(xiàn)代軟件企業(yè)不得不面對(duì)的困境。
如何解決這種軟件的困境呢?領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),給我們指明了方向。他通過將軟件設(shè)計(jì)還原到真實(shí)世界,將軟件設(shè)計(jì)與真實(shí)世界對(duì)應(yīng)起來。這樣,當(dāng)業(yè)務(wù)邏輯變得越來越復(fù)雜的時(shí)候,軟件需求也開始頻繁變更的時(shí)候,我們只需要將業(yè)務(wù)還原到真實(shí)場(chǎng)景,依據(jù)真實(shí)世界來指導(dǎo)我們的軟件設(shè)計(jì),設(shè)計(jì)思路就會(huì)清晰起來,我們就不再迷失方向。
本課程就是在講解如何通過領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),來應(yīng)對(duì)復(fù)雜系統(tǒng)的需求變更,實(shí)現(xiàn)高質(zhì)量的軟件設(shè)計(jì),避免代碼腐化。課程首先剖析了軟件退化的根源,通過對(duì)真實(shí)系統(tǒng)一步一步退化的過程演變,揭示軟件退化的根源,為解決問題指明了方向。接著,有針對(duì)性地講解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是如何解決這些問題,為學(xué)員能夠有效提高軟件設(shè)計(jì)質(zhì)量,提供了思路與方向
然后,通過真實(shí)案例來一步一步講解如何進(jìn)行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),如何通過領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)來指導(dǎo)軟件變更,實(shí)現(xiàn)高質(zhì)量的軟件設(shè)計(jì)。本課程注重實(shí)戰(zhàn),因此每一部分的講解都是基于真實(shí)場(chǎng)景講解,并且在真實(shí)場(chǎng)景中思考與練習(xí)。
二、 培訓(xùn)特色
1. 理論與實(shí)踐相結(jié)合、案例分析與行業(yè)應(yīng)用穿插進(jìn)行;
2. 專家精彩內(nèi)容解析、學(xué)員專題討論、分組研究;
3. 通過全面知識(shí)理解、專題技能和實(shí)踐結(jié)合的授課方式。
三、 培訓(xùn)對(duì)象
中高級(jí)工程師、企業(yè)架構(gòu)師、軟件設(shè)計(jì)師、技術(shù)決策/解決方案人員等。
四、 課程收益
本課程注重實(shí)戰(zhàn),并以工作坊的形式提供很多案例,讓學(xué)員通過練習(xí)掌握領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的過程。同時(shí),通過大量真實(shí)的案例,講解許多公司在開展領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的過程中面臨的難題、解決的思路。
五、 日程安排
日程 | 章節(jié) | 授課內(nèi)容 |
第一天 |
第一單元 剖析領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)思想 |
為什么我們需要領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 1. 現(xiàn)如今DDD越來越流行 2. DDD并不能幫助新項(xiàng)目的軟件開發(fā) 3. DDD真正的作用是日后長(zhǎng)期的維護(hù) 實(shí)踐DDD的4大難題: 1. 準(zhǔn)確理解為什么要采用DDD? 2. 怎樣正確地進(jìn)行業(yè)務(wù)領(lǐng)域建模? 3. 怎樣用領(lǐng)域模型指導(dǎo)開發(fā)與變更? 4. 如何設(shè)計(jì)支持領(lǐng)域驅(qū)動(dòng)的架構(gòu)設(shè)計(jì)? DDD真正的作用是應(yīng)對(duì)日后的軟件維護(hù) 1. 我們現(xiàn)在面對(duì)的是快速變化的時(shí)代 2. 變更越頻繁,代碼質(zhì)量下降越快 案例:演示電商網(wǎng)站付款功能代碼質(zhì)量下降的過程 案例分析:揭示軟件退化的根源 DDD的解決之道:業(yè)務(wù)領(lǐng)域建模 3. 系統(tǒng)規(guī)模越來越大,系統(tǒng)越來越復(fù)雜 案例:演示嵌入式溫控系統(tǒng)越來越難于維護(hù)的根源 案例分析:領(lǐng)域分析才是解決之道 DDD的解決之道:基于限界上下文拆分系統(tǒng) 案例分析:演示電商網(wǎng)站付款功能代碼質(zhì)量下降的過程 1. 起初的設(shè)計(jì) 2. 隨后的變更 3. 質(zhì)量不斷下降的過程 軟件質(zhì)量下降的根源: 1. 軟件總是因變更而變得越來越復(fù)雜 2. 軟件結(jié)構(gòu)已經(jīng)不再適應(yīng)復(fù)雜的軟件需求 3. 必須要調(diào)整軟件結(jié)構(gòu)以適應(yīng)新的軟件需求 DDD的建模過程: 1. 每次需求變更時(shí)先對(duì)需求進(jìn)行領(lǐng)域分析 2. 基于領(lǐng)域分析先進(jìn)行領(lǐng)域模型的變更 3. 基于領(lǐng)域模型的變更去指導(dǎo)程序的變更 DDD是應(yīng)對(duì)軟件復(fù)雜性之道 1. 剖析領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)思想 2. 服務(wù)、實(shí)體與值對(duì)象的概念 3. 充血模型與貧血模型的設(shè)計(jì)思路 4. 問題域、子域與限界上下文劃分 基于領(lǐng)域模型的設(shè)計(jì)變更 1. 演練基于DDD的設(shè)計(jì)與變更過程 2. 演練領(lǐng)域模型如何指導(dǎo)數(shù)據(jù)庫設(shè)計(jì) 3. 演練領(lǐng)域模型如何指導(dǎo)程序設(shè)計(jì) 4. 聚合、倉(cāng)庫與工廠:傻傻分不清 5. 限界上下文:系統(tǒng)拆分的利器 案例:重新演練電商網(wǎng)站付款功能的變更過程 第一個(gè)版本的領(lǐng)域模型與設(shè)計(jì) 第一次變更的分析設(shè)計(jì)過程 第二場(chǎng)變更的設(shè)計(jì)實(shí)現(xiàn) 第三次變更的設(shè)計(jì)實(shí)現(xiàn) 第四次變更與架構(gòu)演化 |
第一天 |
第二單元 演練領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)過程 |
領(lǐng)域建模分析過程 演練案例:在線訂餐系統(tǒng)的領(lǐng)域設(shè)計(jì)過程 1. 從領(lǐng)域中吸取知識(shí) 2. 統(tǒng)一語言建模 3. 事件風(fēng)暴會(huì)議 1) 梳理業(yè)務(wù)流程,識(shí)別領(lǐng)域事件 2) 為每個(gè)領(lǐng)域事件識(shí)別參與者、行為、相關(guān)事物 3) 標(biāo)記事物之間的關(guān)系、聚合、聚合根 4) 根據(jù)業(yè)務(wù)劃分限界上下文 5) 遍歷所有事件,確定上下文映射 4. 業(yè)務(wù)領(lǐng)域建模 1) 為每個(gè)領(lǐng)域事件構(gòu)建業(yè)務(wù)領(lǐng)域模型 2) 劃分主題域、支撐域、通用域 3) 落實(shí)各子域之間的聯(lián)系、接口及事件通知機(jī)制 基于領(lǐng)域模型的微服務(wù)設(shè)計(jì) 1. 小而專的微服務(wù)設(shè)計(jì) 2. 限界上下文與微服務(wù)拆分 3. 上下文地圖與微服務(wù)接口 4. 各微服務(wù)中實(shí)體、值對(duì)象與服務(wù)的設(shè)計(jì) 5. 各微服務(wù)中聚合、工廠與倉(cāng)庫的設(shè)計(jì) 6. 領(lǐng)域模型4種關(guān)系3種繼承的數(shù)據(jù)庫設(shè)計(jì) 7. 聚合層的設(shè)計(jì)、工廠和倉(cāng)庫的實(shí)現(xiàn) 8. 基于DDD的微服務(wù)架構(gòu)分層 解決DDD的設(shè)計(jì)難題 1. 跨庫查詢的設(shè)計(jì)難題與設(shè)計(jì)實(shí)現(xiàn) 2. 領(lǐng)域事件的通知機(jī)制與設(shè)計(jì)實(shí)現(xiàn) 3. 微服務(wù)接口的防腐層設(shè)計(jì) 4. 狀態(tài)查詢跟蹤的設(shè)計(jì)思路與代碼實(shí)現(xiàn) 分組練習(xí):按照事件風(fēng)暴的步驟進(jìn)行業(yè)務(wù)領(lǐng)域建模 1. 召開事件風(fēng)暴會(huì)議 2. 進(jìn)行業(yè)務(wù)領(lǐng)域建模 3. 基于領(lǐng)域模型設(shè)計(jì)開發(fā)系統(tǒng) |
第二天 |
第三單元 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐 |
實(shí)戰(zhàn)演練:遠(yuǎn)程智慧醫(yī)療大數(shù)據(jù)平臺(tái)設(shè)計(jì)過程 1. 系統(tǒng)業(yè)務(wù)規(guī)劃與戰(zhàn)略設(shè)計(jì) 2. 子系統(tǒng)→限界上下文→功能模塊劃分 3. 由粗到細(xì)的用例建模 4. 各子域業(yè)務(wù)領(lǐng)域建模 1) 智慧診療數(shù)據(jù)模型的領(lǐng)域分析 2) 診所管理信息系統(tǒng)的領(lǐng)域分析 5. 各子域的接口設(shè)計(jì) 1) 上下文地圖的模型分析 2) 微服務(wù)接口的方案設(shè)計(jì) 6. 微服務(wù)的技術(shù)落地實(shí)踐 1) 去中心化的技術(shù)治理 2) 微服務(wù)的技術(shù)中臺(tái) 3) 微服務(wù)的云端應(yīng)用平臺(tái) 起初:一個(gè)傳統(tǒng)的診所管理系統(tǒng)向互聯(lián)網(wǎng)轉(zhuǎn)型 1) 起初沒有采用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),也運(yùn)行了這么多年 2) 現(xiàn)在向互聯(lián)網(wǎng)轉(zhuǎn)型,業(yè)務(wù)變得越來越復(fù)雜,怎么開始領(lǐng)域建模? 第一步:站在全局的系統(tǒng)建設(shè)規(guī)劃 第二步:DDD戰(zhàn)略設(shè)計(jì)與限界上下文劃分 第三步:各子域的業(yè)務(wù)領(lǐng)域建模 第四步:上下文地圖與各子域的接口設(shè)計(jì) 轉(zhuǎn)型成互聯(lián)網(wǎng)連鎖診所系統(tǒng),又該如何分析設(shè)計(jì) 1) 基于領(lǐng)域模型進(jìn)行新需求的分析 2) 基于領(lǐng)域模型進(jìn)行原有代碼的更新維護(hù) 3) 基于限界上下文進(jìn)行微服務(wù)的拆分,以及這個(gè)過程中的坑 第一步:基于DDD進(jìn)行戰(zhàn)略設(shè)計(jì)的調(diào)整 第二步:各子域的業(yè)務(wù)領(lǐng)域建模調(diào)整 第四步:上下文地圖與各子域的接口設(shè)計(jì) 第五步:基于DDD的微服務(wù)拆分 Ø 基于DDD的數(shù)據(jù)庫設(shè)計(jì)與去中心化的數(shù)據(jù)治理 Ø 如何由原有的貧血模型向現(xiàn)在的充血模型改造 Ø 如何解決跨庫的關(guān)聯(lián)查詢與事務(wù)處理 Ø 如何實(shí)現(xiàn)領(lǐng)域事件的消息推送機(jī)制 Ø 如何實(shí)現(xiàn)跨庫的狀態(tài)數(shù)據(jù)查詢 Ø 如何打造基于整潔架構(gòu)的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)框架 增加人工智能的智能診療數(shù)據(jù)模型 1) 如何通過領(lǐng)域模型來開展數(shù)據(jù)智能業(yè)務(wù) 2) 如何基于領(lǐng)域模型的規(guī)劃與智能系統(tǒng)的接口 3) 基于領(lǐng)域模型的微服務(wù)+大數(shù)據(jù)的設(shè)計(jì)實(shí)踐 分組練習(xí):按照領(lǐng)域模型進(jìn)行設(shè)計(jì)開發(fā) 1. 基于領(lǐng)域模型進(jìn)行微服務(wù)的拆分與設(shè)計(jì) 2. 基于領(lǐng)域模型進(jìn)行每個(gè)微服務(wù)的數(shù)據(jù)庫設(shè)計(jì) 3. 基于上下文地圖形成微服務(wù)間的契約與接口 |
第二天 |
第四單元 基于領(lǐng)域驅(qū)動(dòng)的技術(shù)中臺(tái)建設(shè) |
DDD需要強(qiáng)大技術(shù)架構(gòu)支持 1. 降低技術(shù)門檻,減少開發(fā)工作量 → 制訂規(guī)范、合理分層、降低復(fù)雜度 2. 易于業(yè)務(wù)變更,易于架構(gòu)演化 → 將業(yè)務(wù)與技術(shù)解耦 3. 支持領(lǐng)域驅(qū)動(dòng),支持微服務(wù) → 通用倉(cāng)庫、工廠及基礎(chǔ)設(shè)施的設(shè)計(jì) 4. 平臺(tái)不斷完善,功能不斷積累 → 敏捷架構(gòu)設(shè)計(jì):架構(gòu)跑道與使能故事 支持DDD的技術(shù)架構(gòu)建設(shè)思路 1. 分析當(dāng)前軟件架構(gòu)設(shè)計(jì)與架構(gòu)演化的痛點(diǎn)與根源 2. 闡述技術(shù)中臺(tái)的建設(shè)思路 1)將業(yè)務(wù)與技術(shù)解耦 → 整潔架構(gòu)與六邊形架構(gòu) 2)提取共性,精簡(jiǎn)業(yè)務(wù)代碼 → 單Controller,單Dao 支持領(lǐng)域驅(qū)動(dòng)+微服務(wù)的技術(shù)中臺(tái) 案例:在線訂餐系統(tǒng)的應(yīng)用 1. 通用、可配置的DDD倉(cāng)庫與工廠的設(shè)計(jì) 2. 解決跨庫的關(guān)聯(lián)查詢與事務(wù)處理 3. 純潔的Service與Entity便于不斷地架構(gòu)演化 現(xiàn)有系統(tǒng)的整潔架構(gòu)轉(zhuǎn)型 1. 系統(tǒng)級(jí)的重構(gòu)方法與步驟 2. 建立接口層解耦業(yè)務(wù)代碼與技術(shù)框架的過程 3. 基于整潔架構(gòu)的技術(shù)架構(gòu)演化與快速交付 |
第三天 | 第五單元 基于DDD的微服務(wù)設(shè)計(jì)實(shí)踐 |
實(shí)戰(zhàn)演練:高并發(fā)高可用的訂單系統(tǒng) 微服務(wù)架構(gòu)的6種設(shè)計(jì)模式 1. 聚合模式 案例:電商網(wǎng)站購(gòu)物功能的設(shè)計(jì) Ø 微服務(wù)前后端分離的設(shè)計(jì) Ø 分布式事務(wù)的兩階段提交 Ø TCC方案與阿里Seata 演練:運(yùn)用Seata實(shí)現(xiàn)微服務(wù)的分布式事務(wù) Ø 基于消息的最終一致性設(shè)計(jì) 演練:基于消息實(shí)現(xiàn)微服務(wù)的分布式事務(wù) 案例:電商網(wǎng)站下單服務(wù)的設(shè)計(jì) 單一職責(zé)原則與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) Ø 互聯(lián)網(wǎng)縱向切分在微服務(wù)的實(shí)現(xiàn) Ø 縱向切分應(yīng)當(dāng)注意的設(shè)計(jì)問題 Ø 解決跨庫關(guān)聯(lián)查詢的設(shè)計(jì) 演練:微服務(wù)間解決跨庫關(guān)聯(lián)查詢的設(shè)計(jì) 2. 代理模式 案例:電商網(wǎng)站多渠道支付的微服務(wù)實(shí)現(xiàn) 3. 鏈?zhǔn)侥J?br /> 4. 分支模式 5. 數(shù)據(jù)共享模式 案例:大數(shù)據(jù)與微服務(wù)結(jié)合的架構(gòu)設(shè)計(jì) 案例:電商網(wǎng)站海量訂單數(shù)據(jù)的秒級(jí)查詢 6. 異步消息模式 案例:電商網(wǎng)站異步化操作的微服務(wù)實(shí)現(xiàn) 微服務(wù)的拆分原則 1. 能不拆盡量不拆:減少微服務(wù)間的調(diào)用 2. 該拆分就得拆分 1) 公共模塊該拆分就得拆分 2) 越來越復(fù)雜的模塊該拆分就得拆分 |
六、 授課專家
范老師 獨(dú)立咨詢顧問,暢銷書籍《架構(gòu)真意》與《大話重構(gòu)》的作者,規(guī)模化敏捷SPC。曾任航天信息首席架構(gòu)師,哈工大軟件工程碩士,軟件架構(gòu)及重構(gòu)的客座講師。從事軟件研發(fā)工作近二十年,并且現(xiàn)在一直堅(jiān)守在大型軟件架構(gòu)設(shè)計(jì)一線工作。
從需求分析、軟件開發(fā)到項(xiàng)目管理、架構(gòu)設(shè)計(jì)都有豐富的從業(yè)經(jīng)驗(yàn)。先后參與了數(shù)十個(gè)國(guó)內(nèi)大型軟件項(xiàng)目,涉及國(guó)家財(cái)政、軍工、稅務(wù)、醫(yī)療等領(lǐng)域的大數(shù)據(jù)中臺(tái)建設(shè)、風(fēng)險(xiǎn)防控與人工智能研究。互聯(lián)網(wǎng)轉(zhuǎn)型、微服務(wù)轉(zhuǎn)型及大數(shù)據(jù)轉(zhuǎn)型的實(shí)踐者與倡導(dǎo)者。
同時(shí),還是大型遺留系統(tǒng)改造專業(yè)戶,多次參與大型遺留系統(tǒng)改造、軟件系統(tǒng)重構(gòu)等重大項(xiàng)目,長(zhǎng)期關(guān)注大型業(yè)務(wù)系統(tǒng)的品質(zhì)保證、防止腐化以及技術(shù)改造等困擾軟件企業(yè)的問題,在遺留系統(tǒng)優(yōu)化與改造方面有豐富的經(jīng)驗(yàn)。
程老師 中國(guó)科學(xué)院軟件研究所碩士,主要研究方向:架構(gòu)設(shè)計(jì)、項(xiàng)目管理實(shí)踐、大型高可用高并發(fā)架構(gòu)設(shè)計(jì)、微服務(wù)架構(gòu)、軟件測(cè)試等等。熟悉網(wǎng)絡(luò)分布式計(jì)算、數(shù)據(jù)庫、網(wǎng)絡(luò)操作系統(tǒng),精通J2EE、SQL、中間件服務(wù)器。
在J2EE技術(shù)領(lǐng)域具有理論功底和實(shí)踐經(jīng)驗(yàn)。在J2ME商務(wù)應(yīng)用和基于J2ME游戲開發(fā)領(lǐng)域具有深厚的理論功底和豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。主要授課方向:DevOps落地實(shí)踐、微服務(wù)架構(gòu)、軟件構(gòu)架設(shè)計(jì)、UML、GO語言、OOAD、J2EE企業(yè)級(jí)高級(jí)應(yīng)用開發(fā)等。
擅長(zhǎng)架構(gòu)企業(yè)級(jí)應(yīng)用;有獨(dú)立工作流引擎開發(fā)、企業(yè)系統(tǒng)應(yīng)用集成方面的豐富經(jīng)驗(yàn);在企業(yè)門戶(Portal)、報(bào)表、工作流引擎和企業(yè)服務(wù)總線(ESB)等應(yīng)用領(lǐng)域有深入的理論研究和充分的實(shí)踐;對(duì)軟件開發(fā)的整個(gè)流程有深刻認(rèn)識(shí),有很好的協(xié)作精神和學(xué)習(xí)能力。在架構(gòu)下的系統(tǒng)設(shè)計(jì)和開發(fā)方面均有豐富經(jīng)驗(yàn)。能夠結(jié)合實(shí)際,在復(fù)雜的應(yīng)用環(huán)境中選擇適合的技術(shù)組合并合理利用開源中間件來降低項(xiàng)目開發(fā)風(fēng)險(xiǎn)、縮短開發(fā)周期、提高應(yīng)用系統(tǒng)的可維護(hù)性和可擴(kuò)展性。
本課程由中國(guó)信息化培訓(xùn)中心頒發(fā)《領(lǐng)域驅(qū)動(dòng)專家》證書,證書查詢網(wǎng)址:www.qinzhounet.cn;證書可作為專業(yè)技術(shù)人員職業(yè)能力考核的證明,以及專業(yè)技術(shù)人員崗位聘用、任職、定級(jí)和晉升職務(wù)的重要依據(jù)。