課程簡(jiǎn)介
本課程基于多年實(shí)踐領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的經(jīng)驗(yàn)與心得,糅合了 DDD 社區(qū)最新發(fā)展的理論知識(shí)與最佳實(shí)踐,覆蓋從需求到實(shí)現(xiàn)全面系統(tǒng)的講解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。本篇是實(shí)戰(zhàn)篇,
目標(biāo)收益
學(xué)員通過課程,可以深入學(xué)習(xí)到企業(yè)級(jí)N層的框架實(shí)現(xiàn)原理。每一層的職責(zé)以及功能目標(biāo),DDD中的核心戰(zhàn)術(shù)概念及工具,比如:領(lǐng)域服務(wù),領(lǐng)域事件,資源庫,聚合,實(shí)體,值對(duì)象。以及DDD的戰(zhàn)略建模工具,如:界限上下文,上下文映射圖。以及對(duì)于以上這些概念,在代碼層面的設(shè)計(jì)于實(shí)現(xiàn)。
培訓(xùn)對(duì)象
具有以下經(jīng)驗(yàn)的 架構(gòu)師,后端開發(fā)工程師,以及其他軟件從業(yè)人員具有基礎(chǔ)的架構(gòu)設(shè)計(jì)知識(shí)
至少掌握一門面向?qū)ο笳Z言
具有基本的面向?qū)ο蟪绦蛟O(shè)計(jì)能力
具有一年或一年以上的業(yè)務(wù)系統(tǒng)開發(fā)經(jīng)驗(yàn)
課程大綱
一、實(shí)體 – 數(shù)據(jù)容器還是行為載體 |
1.貧血模型 2.如何避免貧血,實(shí)體與領(lǐng)域服務(wù)之間的分寸 3.唯一標(biāo)識(shí) 4.委派標(biāo)識(shí) 5.案例:實(shí)現(xiàn)實(shí)體層超類型(Layer Supertype) 6.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 實(shí)體行為歸屬甄別 |
二、值對(duì)象 – 性能提升小幫手 |
1.什么是值對(duì)象 2.值對(duì)象的特征 3.為什么值對(duì)象這么容易被忽略 4.案例:地址建模與值對(duì)象 5.案例:實(shí)現(xiàn)值對(duì)象層超類型 |
三、聚合 – 比類更高一層的封裝 |
1.聚合設(shè)計(jì)原則 2.聚合設(shè)計(jì)的過程 3.聚合的一致性邊界 4.一個(gè)事務(wù)中只處理一個(gè)聚合 5.UML 中的聚合 與 DDD 中的聚合 6.聚合內(nèi)實(shí)現(xiàn)事務(wù)一致性 7.聚合外實(shí)現(xiàn)最終一致性 8.案例:更新訂單狀態(tài)與庫存扣減 Version 1.0 9.案例:更新訂單狀態(tài)與庫存扣減 Version 2.0 10.聚合設(shè)計(jì)的注意點(diǎn) |
四、應(yīng)用服務(wù) – 用例是樂譜,應(yīng)用服務(wù)是指揮家 |
11.用例 (Use Case) 與應(yīng)用服務(wù) 12.應(yīng)用服務(wù)中的 編排,轉(zhuǎn)換,驗(yàn)證,轉(zhuǎn)發(fā) 13.工作單元 (Unit of Work) 14.數(shù)據(jù)傳輸對(duì)象 (Data Transfer Object) 15.事務(wù)腳本 (Transaction Script) 與領(lǐng)域模型 16.依賴注入在應(yīng)用服務(wù)中的使用 17.案例:實(shí)現(xiàn)應(yīng)用服務(wù) 18.應(yīng)用服務(wù)的關(guān)注點(diǎn) 19.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 應(yīng)用層構(gòu)建 |
五、領(lǐng)域服務(wù) – 不是實(shí)體本身的行為都?xì)w它 |
1.領(lǐng)域服務(wù)的冪等性 2.案例:實(shí)現(xiàn)領(lǐng)域服務(wù) 3.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 領(lǐng)域服務(wù)層構(gòu)建 |
六、領(lǐng)域事件 – 保持最終一致性的信使 |
1.領(lǐng)域事件是領(lǐng)域建模中極其重要的部分 2.事務(wù)一致性,高并發(fā)下的窘境 3.最終一致性,妥協(xié)帶來高擴(kuò)展性 4.原則:一個(gè)事務(wù)中只對(duì)一個(gè)聚合進(jìn)行修改 5.案例:實(shí)現(xiàn)抽象事件源,發(fā)布事件源 6.案例:實(shí)現(xiàn)抽象事件處理 7.案例:實(shí)現(xiàn)領(lǐng)域事件的發(fā)布與訂閱 8.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 任務(wù)分配領(lǐng)域邏輯 |
七、資源庫 – 聚合的起點(diǎn)與終點(diǎn) |
1.集合特性 2.資源庫與數(shù)據(jù)訪問層的區(qū)別 3.資源庫的誤解 4.資源庫的實(shí)現(xiàn)要點(diǎn) 5.案例:資源庫的實(shí)現(xiàn) 6.領(lǐng)域模型 VS 數(shù)據(jù)模型 7.案例:泛型資源庫 8.實(shí)戰(zhàn):實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 持久化 |
一、實(shí)體 – 數(shù)據(jù)容器還是行為載體 1.貧血模型 2.如何避免貧血,實(shí)體與領(lǐng)域服務(wù)之間的分寸 3.唯一標(biāo)識(shí) 4.委派標(biāo)識(shí) 5.案例:實(shí)現(xiàn)實(shí)體層超類型(Layer Supertype) 6.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 實(shí)體行為歸屬甄別 |
二、值對(duì)象 – 性能提升小幫手 1.什么是值對(duì)象 2.值對(duì)象的特征 3.為什么值對(duì)象這么容易被忽略 4.案例:地址建模與值對(duì)象 5.案例:實(shí)現(xiàn)值對(duì)象層超類型 |
三、聚合 – 比類更高一層的封裝 1.聚合設(shè)計(jì)原則 2.聚合設(shè)計(jì)的過程 3.聚合的一致性邊界 4.一個(gè)事務(wù)中只處理一個(gè)聚合 5.UML 中的聚合 與 DDD 中的聚合 6.聚合內(nèi)實(shí)現(xiàn)事務(wù)一致性 7.聚合外實(shí)現(xiàn)最終一致性 8.案例:更新訂單狀態(tài)與庫存扣減 Version 1.0 9.案例:更新訂單狀態(tài)與庫存扣減 Version 2.0 10.聚合設(shè)計(jì)的注意點(diǎn) |
四、應(yīng)用服務(wù) – 用例是樂譜,應(yīng)用服務(wù)是指揮家 11.用例 (Use Case) 與應(yīng)用服務(wù) 12.應(yīng)用服務(wù)中的 編排,轉(zhuǎn)換,驗(yàn)證,轉(zhuǎn)發(fā) 13.工作單元 (Unit of Work) 14.數(shù)據(jù)傳輸對(duì)象 (Data Transfer Object) 15.事務(wù)腳本 (Transaction Script) 與領(lǐng)域模型 16.依賴注入在應(yīng)用服務(wù)中的使用 17.案例:實(shí)現(xiàn)應(yīng)用服務(wù) 18.應(yīng)用服務(wù)的關(guān)注點(diǎn) 19.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 應(yīng)用層構(gòu)建 |
五、領(lǐng)域服務(wù) – 不是實(shí)體本身的行為都?xì)w它 1.領(lǐng)域服務(wù)的冪等性 2.案例:實(shí)現(xiàn)領(lǐng)域服務(wù) 3.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 領(lǐng)域服務(wù)層構(gòu)建 |
六、領(lǐng)域事件 – 保持最終一致性的信使 1.領(lǐng)域事件是領(lǐng)域建模中極其重要的部分 2.事務(wù)一致性,高并發(fā)下的窘境 3.最終一致性,妥協(xié)帶來高擴(kuò)展性 4.原則:一個(gè)事務(wù)中只對(duì)一個(gè)聚合進(jìn)行修改 5.案例:實(shí)現(xiàn)抽象事件源,發(fā)布事件源 6.案例:實(shí)現(xiàn)抽象事件處理 7.案例:實(shí)現(xiàn)領(lǐng)域事件的發(fā)布與訂閱 8.實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 任務(wù)分配領(lǐng)域邏輯 |
七、資源庫 – 聚合的起點(diǎn)與終點(diǎn) 1.集合特性 2.資源庫與數(shù)據(jù)訪問層的區(qū)別 3.資源庫的誤解 4.資源庫的實(shí)現(xiàn)要點(diǎn) 5.案例:資源庫的實(shí)現(xiàn) 6.領(lǐng)域模型 VS 數(shù)據(jù)模型 7.案例:泛型資源庫 8.實(shí)戰(zhàn):實(shí)戰(zhàn) - 任務(wù)分配執(zhí)行系統(tǒng) 持久化 |