課程描述INTRODUCTION
· 高層管理者· 中層領(lǐng)導(dǎo)· 其他人員· 技術(shù)主管
日程安排SCHEDULE
課程大綱Syllabus
領(lǐng)域驅(qū)動軟件設(shè)計公開課
培訓(xùn)對象:
中高級工程師、企業(yè)架構(gòu)師、軟件設(shè)計師、技術(shù)決策/解決方案人員等。
培訓(xùn)收益
現(xiàn)在是一個快速變化的時代,我們不得不面對激烈的競爭和快速的市場變化。快速的變化,帶來軟件需求的快速變革。因此,所有的軟件企業(yè)不得不面對這樣一個事實:當(dāng)軟件系統(tǒng)經(jīng)歷了無數(shù)次變更以后,程序變得凌亂不堪、難于維護。而軟件經(jīng)過了無數(shù)次變更以后,系統(tǒng)的業(yè)務(wù)邏輯變得越來越復(fù)雜,我們的設(shè)計開始迷失方向。這種設(shè)計的迷失,加快了軟件退化的速度,使得任何一個變更,都變得成本巨大。這就是現(xiàn)代軟件企業(yè)不得不面對的困境。
如何解決這種軟件的困境呢?領(lǐng)域驅(qū)動設(shè)計,給我們指明了方向。他通過將軟件設(shè)計還原到真實世界,將軟件設(shè)計與真實世界對應(yīng)起來。這樣,當(dāng)業(yè)務(wù)邏輯變得越來越復(fù)雜的時候,軟件需求也開始頻繁變更的時候,我們只需要將業(yè)務(wù)還原到真實場景,依據(jù)真實世界來指導(dǎo)我們的軟件設(shè)計,設(shè)計思路就會清晰起來,我們就不再迷失方向。
本課程就是在講解如何通過領(lǐng)域驅(qū)動設(shè)計,來應(yīng)對復(fù)雜系統(tǒng)的需求變更,實現(xiàn)高質(zhì)量的軟件設(shè)計,避免代碼腐化。課程首先剖析了軟件退化的根源,通過對真實系統(tǒng)一步一步退化的過程演變,揭示軟件退化的根源,為解決問題指明了方向。接著,有針對性地講解領(lǐng)域驅(qū)動設(shè)計是如何解決這些問題,為學(xué)員能夠有效提高軟件設(shè)計質(zhì)量,提供了思路與方向
然后,通過真實案例來一步一步講解如何進(jìn)行領(lǐng)域驅(qū)動設(shè)計,如何通過領(lǐng)域驅(qū)動設(shè)計來指導(dǎo)軟件變更,實現(xiàn)高質(zhì)量的軟件設(shè)計。本課程注重實戰(zhàn),因此每一部分的講解都是基于真實場景講解,并且在真實場景中思考與練習(xí)。
培訓(xùn)特色
1.理論與實踐相結(jié)合、案例分析與行業(yè)應(yīng)用穿插進(jìn)行;
2.專家精彩內(nèi)容解析、學(xué)員專題討論、分組研究;
3.通過全面知識理解、專題技能和實踐結(jié)合的授課方式。
課程收益
本課程注重實戰(zhàn),并以工作坊的形式提供很多案例,讓學(xué)員通過練習(xí)掌握領(lǐng)域驅(qū)動設(shè)計的過程。同時,通過大量真實的案例,講解許多公司在開展領(lǐng)域驅(qū)動設(shè)計的過程中面臨的難題、解決的思路,以及最終的設(shè)計養(yǎng)
課程大綱:
第一天上午
第一單元
剖析領(lǐng)域驅(qū)動的設(shè)計思想
為什么我們需要領(lǐng)域驅(qū)動設(shè)計
1.現(xiàn)如今DDD越來越流行
2.DDD并不能幫助新項目的軟件開發(fā)
3.DDD真正的作用是日后長期的維護
實踐DDD的4大難題:
1.準(zhǔn)確理解為什么要采用DDD?
2.怎樣正確地進(jìn)行業(yè)務(wù)領(lǐng)域建模?
3.怎樣用領(lǐng)域模型指導(dǎo)開發(fā)與變更?
4.如何設(shè)計支持領(lǐng)域驅(qū)動的架構(gòu)設(shè)計?
DDD真正的作用是應(yīng)對日后的軟件維護
1.我們現(xiàn)在面對的是快速變化的時代
2.變更越頻繁,代碼質(zhì)量下降越快
案例:演示電商網(wǎng)站付款功能代碼質(zhì)量下降的過程
案例分析:揭示軟件退化的根源
DDD的解決之道:業(yè)務(wù)領(lǐng)域建模
3.系統(tǒng)規(guī)模越來越大,系統(tǒng)越來越復(fù)雜
案例:演示嵌入式溫控系統(tǒng)越來越難于維護的根源
案例分析:領(lǐng)域分析才是解決之道
DDD的解決之道:基于限界上下文拆分系統(tǒng)
案例分析:演示電商網(wǎng)站付款功能代碼質(zhì)量下降的過程
1.起初的設(shè)計
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.每次需求變更時先對需求進(jìn)行領(lǐng)域分析
2.基于領(lǐng)域分析先進(jìn)行領(lǐng)域模型的變更
3.基于領(lǐng)域模型的變更去指導(dǎo)程序的變更
DDD是應(yīng)對軟件復(fù)雜性之道
1.剖析領(lǐng)域驅(qū)動的設(shè)計思想
2.服務(wù)、實體與值對象的概念
3.充血模型與貧血模型的設(shè)計思路
4.問題域、子域與限界上下文劃分
基于領(lǐng)域模型的設(shè)計變更
1.演練基于DDD的設(shè)計與變更過程
2.演練領(lǐng)域模型如何指導(dǎo)數(shù)據(jù)庫設(shè)計
3.演練領(lǐng)域模型如何指導(dǎo)程序設(shè)計
4.聚合、倉庫與工廠:傻傻分不清
5.限界上下文:系統(tǒng)拆分的利器
案例:重新演練電商網(wǎng)站付款功能的變更過程
第一個版本的領(lǐng)域模型與設(shè)計
第一次變更的分析設(shè)計過程
第二場變更的設(shè)計實現(xiàn)
第三次變更的設(shè)計實現(xiàn)
第四次變更與架構(gòu)演化
第一天下午
第二單元
演練領(lǐng)域驅(qū)動的設(shè)計過程
領(lǐng)域建模分析過程
演練案例:在線訂餐系統(tǒng)的領(lǐng)域設(shè)計過程
1.從領(lǐng)域中吸取知識
2.統(tǒng)一語言建模
3.事件風(fēng)暴會議
1)梳理業(yè)務(wù)流程,識別領(lǐng)域事件
2)為每個領(lǐng)域事件識別參與者、行為、相關(guān)事物
3)標(biāo)記事物之間的關(guān)系、聚合、聚合根
4)根據(jù)業(yè)務(wù)劃分限界上下文
5)遍歷所有事件,確定上下文映射
4.業(yè)務(wù)領(lǐng)域建模
1)為每個領(lǐng)域事件構(gòu)建業(yè)務(wù)領(lǐng)域模型
2)劃分主題域、支撐域、通用域
3)落實各子域之間的聯(lián)系、接口及事件通知機制
基于領(lǐng)域模型的微服務(wù)設(shè)計
1.小而專的微服務(wù)設(shè)計
2.限界上下文與微服務(wù)拆分
3.上下文地圖與微服務(wù)接口
4.各微服務(wù)中實體、值對象與服務(wù)的設(shè)計
5.各微服務(wù)中聚合、工廠與倉庫的設(shè)計
6.領(lǐng)域模型4種關(guān)系3種繼承的數(shù)據(jù)庫設(shè)計
7.聚合層的設(shè)計、工廠和倉庫的實現(xiàn)
8.基于DDD的微服務(wù)架構(gòu)分層
解決DDD的設(shè)計難題
1.跨庫查詢的設(shè)計難題與設(shè)計實現(xiàn)
2.領(lǐng)域事件的通知機制與設(shè)計實現(xiàn)
3.微服務(wù)接口的防腐層設(shè)計
4.狀態(tài)查詢跟蹤的設(shè)計思路與代碼實現(xiàn)
分組練習(xí):按照事件風(fēng)暴的步驟進(jìn)行業(yè)務(wù)領(lǐng)域建模
1. 召開事件風(fēng)暴會議
2. 進(jìn)行業(yè)務(wù)領(lǐng)域建模
3. 基于領(lǐng)域模型設(shè)計開發(fā)系統(tǒng)
第二天上午
第三單元
領(lǐng)域驅(qū)動設(shè)計實踐
實戰(zhàn)演練:遠(yuǎn)程智慧醫(yī)療大數(shù)據(jù)平臺設(shè)計過程
1.系統(tǒng)業(yè)務(wù)規(guī)劃與戰(zhàn)略設(shè)計
2.子系統(tǒng)→限界上下文→功能模塊劃分
3.由粗到細(xì)的用例建模
4.各子域業(yè)務(wù)領(lǐng)域建模
1)智慧診療數(shù)據(jù)模型的領(lǐng)域分析
2)診所管理信息系統(tǒng)的領(lǐng)域分析
5.各子域的接口設(shè)計
1)上下文地圖的模型分析
2)微服務(wù)接口的方案設(shè)計
6.微服務(wù)的技術(shù)落地實踐
1)去中心化的技術(shù)治理
2)微服務(wù)的技術(shù)中臺
3)微服務(wù)的云端應(yīng)用平臺
起初:一個傳統(tǒng)的診所管理系統(tǒng)向互聯(lián)網(wǎng)轉(zhuǎn)型
1)起初沒有采用領(lǐng)域驅(qū)動設(shè)計,也運行了這么多年
2)現(xiàn)在向互聯(lián)網(wǎng)轉(zhuǎn)型,業(yè)務(wù)變得越來越復(fù)雜,怎么開始領(lǐng)域建模?
第一步:站在全局的系統(tǒng)建設(shè)規(guī)劃
第二步:DDD戰(zhàn)略設(shè)計與限界上下文劃分
第三步:各子域的業(yè)務(wù)領(lǐng)域建模
第四步:上下文地圖與各子域的接口設(shè)計
轉(zhuǎn)型成互聯(lián)網(wǎng)連鎖診所系統(tǒng),又該如何分析設(shè)計
1)基于領(lǐng)域模型進(jìn)行新需求的分析
2)基于領(lǐng)域模型進(jìn)行原有代碼的更新維護
3)基于限界上下文進(jìn)行微服務(wù)的拆分,以及這個過程中的坑
第一步:基于DDD進(jìn)行戰(zhàn)略設(shè)計的調(diào)整
第二步:各子域的業(yè)務(wù)領(lǐng)域建模調(diào)整
第四步:上下文地圖與各子域的接口設(shè)計
第五步:基于DDD的微服務(wù)拆分
基于DDD的數(shù)據(jù)庫設(shè)計與去中心化的數(shù)據(jù)治理
如何由原有的貧血模型向現(xiàn)在的充血模型改造
如何解決跨庫的關(guān)聯(lián)查詢與事務(wù)處理
如何實現(xiàn)領(lǐng)域事件的消息推送機制
如何實現(xiàn)跨庫的狀態(tài)數(shù)據(jù)查詢
如何打造基于整潔架構(gòu)的領(lǐng)域驅(qū)動設(shè)計框架
增加人工智能的智能診療數(shù)據(jù)模型
1)如何通過領(lǐng)域模型來開展數(shù)據(jù)智能業(yè)務(wù)
2)如何基于領(lǐng)域模型的規(guī)劃與智能系統(tǒng)的接口
3)基于領(lǐng)域模型的微服務(wù)+大數(shù)據(jù)的設(shè)計實踐
分組練習(xí):按照領(lǐng)域模型進(jìn)行設(shè)計開發(fā)
1. 基于領(lǐng)域模型進(jìn)行微服務(wù)的拆分與設(shè)計
2. 基于領(lǐng)域模型進(jìn)行每個微服務(wù)的數(shù)據(jù)庫設(shè)計
3. 基于上下文地圖形成微服務(wù)間的契約與接口
第二天下午
第四單元
基于領(lǐng)域驅(qū)動的技術(shù)中臺建設(shè) DDD需要強大技術(shù)架構(gòu)支持
1.降低技術(shù)門檻,減少開發(fā)工作量 → 制訂規(guī)范、合理分層、降低復(fù)雜度
2.易于業(yè)務(wù)變更,易于架構(gòu)演化 → 將業(yè)務(wù)與技術(shù)解耦
3.支持領(lǐng)域驅(qū)動,支持微服務(wù) → 通用倉庫、工廠及基礎(chǔ)設(shè)施的設(shè)計
4.平臺不斷完善,功能不斷積累 → 敏捷架構(gòu)設(shè)計:架構(gòu)跑道與使能故事
支持DDD的技術(shù)架構(gòu)建設(shè)思路
1.分析當(dāng)前軟件架構(gòu)設(shè)計與架構(gòu)演化的痛點與根源
2.闡述技術(shù)中臺的建設(shè)思路
1)將業(yè)務(wù)與技術(shù)解耦 → 整潔架構(gòu)與六邊形架構(gòu)
2)提取共性,精簡業(yè)務(wù)代碼 → 單Controller,單Dao
支持領(lǐng)域驅(qū)動+微服務(wù)的技術(shù)中臺
案例:在線訂餐系統(tǒng)的應(yīng)用
1.通用、可配置的DDD倉庫與工廠的設(shè)計
2.解決跨庫的關(guān)聯(lián)查詢與事務(wù)處理
3.純潔的Service與Entity便于不斷地架構(gòu)演化
現(xiàn)有系統(tǒng)的整潔架構(gòu)轉(zhuǎn)型
1.系統(tǒng)級的重構(gòu)方法與步驟
2.建立接口層解耦業(yè)務(wù)代碼與技術(shù)框架的過程
3.基于整潔架構(gòu)的技術(shù)架構(gòu)演化與快速交付
第三天
第五單元
基于DDD的微服務(wù)設(shè)計實踐
實戰(zhàn)演練:高并發(fā)高可用的訂單系統(tǒng)
微服務(wù)架構(gòu)的6種設(shè)計模式
1.聚合模式
案例:電商網(wǎng)站購物功能的設(shè)計
微服務(wù)前后端分離的設(shè)計
分布式事務(wù)的兩階段提交
TCC方案與阿里Seata
演練:運用Seata實現(xiàn)微服務(wù)的分布式事務(wù)
基于消息的最終一致性設(shè)計
演練:基于消息實現(xiàn)微服務(wù)的分布式事務(wù)
案例:電商網(wǎng)站下單服務(wù)的設(shè)計
單一職責(zé)原則與領(lǐng)域驅(qū)動設(shè)計
互聯(lián)網(wǎng)縱向切分在微服務(wù)的實現(xiàn)
縱向切分應(yīng)當(dāng)注意的設(shè)計問題
解決跨庫關(guān)聯(lián)查詢的設(shè)計
演練:微服務(wù)間解決跨庫關(guān)聯(lián)查詢的設(shè)計
2.代理模式
案例:電商網(wǎng)站多渠道支付的微服務(wù)實現(xiàn)
3.鏈?zhǔn)侥J?br />
4.分支模式
5.數(shù)據(jù)共享模式
案例:大數(shù)據(jù)與微服務(wù)結(jié)合的架構(gòu)設(shè)計
案例:電商網(wǎng)站海量訂單數(shù)據(jù)的秒級查詢
6.異步消息模式
案例:電商網(wǎng)站異步化操作的微服務(wù)實現(xiàn)
微服務(wù)的拆分原則
1.能不拆盡量不拆:減少微服務(wù)間的調(diào)用
2.該拆分就得拆分
1)公共模塊該拆分就得拆分
2)越來越復(fù)雜的模塊該拆分就得拆分
領(lǐng)域驅(qū)動軟件設(shè)計公開課
轉(zhuǎn)載:http://www.jkyingpanluxiangji.com/gkk_detail/301821.html