曙海教學(xué)優(yōu)勢
本課程,秉承二十一年積累的教學(xué)品質(zhì),以項目實現(xiàn)為導(dǎo)向,面向企事業(yè)項目實際需要,老師將會與您分享設(shè)計的全流程以及工具的綜合使用經(jīng)驗、技巧。課程可定制,線上/線下/上門皆可,熱線:4008699035。
曙海培訓(xùn)的課程培養(yǎng)了大批受企業(yè)歡迎的工程師。大批企業(yè)和曙海
建立了良好的合作關(guān)系,合作企業(yè)30萬+。曙海培訓(xùn)的課程在業(yè)內(nèi)有著響亮的知名度。
課程大綱
? ? ? ? ? 軟件設(shè)計原則、思路或最佳實踐 |
|
? |
一、???????? ??企業(yè)級架構(gòu)設(shè)計概述 1.?認(rèn)識分層架構(gòu) 2.?分層架構(gòu)的演化 3.?領(lǐng)域驅(qū)動架構(gòu)的演進 4.?界限上下文與架構(gòu) 5.?六邊形架構(gòu) 6.?端口與適配器 7.?整潔架構(gòu) 8.?CQRS架構(gòu) 9.?在CQRS中處理具有最終一致性的查詢模型 10.事件溯源 EventSouring 11.使用樂觀鎖處理并發(fā)更新 12.事件溯源和發(fā)布事件 13.冪等方式處理消息 14.使用快照提升性能 15.管道與過濾器 16.SAGA(消息驅(qū)動事務(wù)) 17.協(xié)同式與編排式 18.SAGA下實現(xiàn)隔離 |
軟件設(shè)計中的核心原則 ? SOLID |
|
? |
二、單一職責(zé)原則 1.?次時代租車服務(wù)終端 (ARCS)的初步設(shè)計 2.?用例 (UseCase) 的作用 – 劃分邊界及概覽 3.?SRP的設(shè)計誤區(qū) 4.?重構(gòu)至 SRP 的方法1:提取類 5.?重構(gòu)至 SRP 的方法2:Proxy模式 6.?前端代碼 SRP重構(gòu):投票組件 7.?過程性代碼的 SRP 違反直覺的真相:性能優(yōu)化的步驟 |
? |
三、開放封閉原則 1.?代碼中的接線板是什么? 2.?編程價值觀 – 溝通,簡單,靈活 3.?如何做到對擴展開放,對修改封閉 4.?次時代租車服務(wù)終端 (ARCS)的促銷需求 5.?笨拙的促銷實現(xiàn) 6.?如何不修改代碼而改變它的行為 7.?最簡單的 OCP實現(xiàn) – 策略模式 8.?前端代碼重構(gòu):拆分復(fù)雜表達(dá)式 敏捷開發(fā)的精髓 – 只被第一顆子彈擊中 |
? |
四、里氏替換原則 1.?什么才是好的繼承關(guān)系 2.?子類為什么要能透明的替換基類 3.?次時代租車服務(wù)終端 (ARCS)的新需求 – 電動轎車費用計算 4.?白盒復(fù)用 還是 黑盒復(fù)用 5.?IS-A的精髓:針對屬性還是針對行為 6.?契約式設(shè)計繼承體系 7.?重構(gòu)方法:提升為兄弟類 8.?前端代碼重構(gòu):抽取函數(shù) 9.?如何才能讓 次時代租車服務(wù)終端 (ARCS)的代碼符合 LSP 這樣做我們可能會引入什么新的問題? |
? |
五、接口隔離原則 1.?接口“變胖”的問題 – 接口污染 2.?佳能一體機的遺留接口問題 3.?如何實現(xiàn)接口分離 – 適配器模式 4.?類適配器 – 多繼承 5.?對象適配器 – 委托 6.?使用單元測試來發(fā)現(xiàn)問題 7.?前端代碼重構(gòu):使用模板方法重新組織邏輯 8.?次時代租車服務(wù)終端 (ARCS)在接口劃分上的問題 9.?如何簡化復(fù)雜的邏輯 10.???????如何使用模板方法分離抽象與具體 案例:ATM機接口設(shè)計的演化 |
? |
六、依賴倒置原則 1.?結(jié)構(gòu)化設(shè)計理念的問題 2.?對象化設(shè)計理念 3.?依賴倒置到底倒置了什么 4.?如何分離關(guān)注點 5.?DI-依賴注入解決的問題:講對象的創(chuàng)建與使用分離 案例:消息隊列設(shè)計的演化 |
領(lǐng)域?qū)拥脑O(shè)計與實踐 |
|
? |
七、實體 – 數(shù)據(jù)容器還是行為載體 6.?貧血模型 7.?如何避免貧血,實體與領(lǐng)域服務(wù)之間的分寸 8.?唯一標(biāo)識 9.?委派標(biāo)識 10.案例:實現(xiàn)實體層超類型(Layer Supertype) 11.實戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 實體行為歸屬甄別 |
? |
八、值對象 – 性能提升小幫手 1.?什么是值對象 2.?值對象的特征 3.?為什么值對象這么容易被忽略 4.?案例:地址建模與值對象 5.?案例:實現(xiàn)值對象層超類型 |
? |
九、聚合 – 比類更高一層的封裝 1.?聚合設(shè)計原則 2.?聚合設(shè)計的過程 3.?聚合的一致性邊界 4.?一個事務(wù)中只處理一個聚合 5.?UML?中的聚合 與 DDD 中的聚合 6.?聚合內(nèi)實現(xiàn)事務(wù)一致性 7.?聚合外實現(xiàn)最終一致性 8.?案例:更新訂單狀態(tài)與庫存扣減 Version 1.0 9.?案例:更新訂單狀態(tài)與庫存扣減 Version 2.0 10.聚合設(shè)計的注意點 |
服務(wù)層的設(shè)計與實踐 |
|
? |
十、微服務(wù)的入口 - 應(yīng)用服務(wù) 1.?用例 (Use Case) 與應(yīng)用服務(wù) 2.?微服務(wù)的網(wǎng)關(guān) 與 應(yīng)用服務(wù) 之間的關(guān)系 3.?應(yīng)用服務(wù)中的 編排,轉(zhuǎn)換,驗證,轉(zhuǎn)發(fā) 4.?工作單元 (Unit of Work) 5.?數(shù)據(jù)傳輸對象 (Data Transfer Object) 6.?事務(wù)腳本 (Transaction Script) 與領(lǐng)域模型 7.?依賴注入在應(yīng)用服務(wù)中的使用 8.?案例:實現(xiàn)應(yīng)用服務(wù) 9.?應(yīng)用服務(wù)的關(guān)注點 10.實戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 應(yīng)用層構(gòu)建 |
? |
十一、領(lǐng)域服務(wù) – 不是實體本身的行為都?xì)w它 1.?領(lǐng)域服務(wù)的冪等性 2.?案例:實現(xiàn)領(lǐng)域服務(wù) 3.?實戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 領(lǐng)域服務(wù)層構(gòu)建 |
? |
十二、資源庫 – 聚合的起點與終點 1.?集合特性 2.?資源庫與數(shù)據(jù)訪問層的區(qū)別 3.?資源庫的誤解 4.?資源庫的實現(xiàn)要點 5.?案例:資源庫的實現(xiàn) 6.?領(lǐng)域模型 VS數(shù)據(jù)模型 7.?案例:泛型資源庫 實戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 持久化 |
基于事件驅(qū)動的架構(gòu)設(shè)計 |
|
? |
十三、領(lǐng)域事件 – 保持最終一致性的信使 1.?領(lǐng)域事件是領(lǐng)域建模中極其重要的部分 2.?事務(wù)一致性,高并發(fā)下的窘境 3.?最終一致性,妥協(xié)帶來高擴展性 4.?原則:一個事務(wù)中只對一個聚合進行修改 5.?案例:實現(xiàn)抽象事件源,發(fā)布事件源 6.?案例:實現(xiàn)抽象事件處理 7.?案例:實現(xiàn)領(lǐng)域事件的發(fā)布與訂閱 8.?實戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 任務(wù)分配領(lǐng)域邏輯 |
? |
十四、微服務(wù)中基于事件的系統(tǒng)架構(gòu) 1.?微服務(wù)之間如何穩(wěn)健的發(fā)布與消費事件 2.?如何保證發(fā)布事件的原子性 3.?使用事件表發(fā)布事件 4.?案例:如何實現(xiàn)事件感知聚合根 5.?案例:如何實現(xiàn)事件感知資源庫 6.?如何通過 AOP 進行通用的事件處理 |
? |
十五、微服務(wù)形式下的CQRS 1.?DDD中的典型寫操作 2.?基于數(shù)據(jù)模型的讀操作 3.?基于領(lǐng)域模型的讀操作 4.?讀寫分離模型 5.?案例:電商系統(tǒng)中的讀寫分離場景 6.?單進程單實體 + 共享存儲/共享模型:Inventory詳情查詢 7.?單進程單實體 + 共享存儲/分離模型:Product摘要查詢 8.?單進程跨實體 + 分離存儲/分離模型:Product詳情查詢(包含Category信息) 9.?跨進程跨實體 + 分離存儲/分離模型:Order詳情查詢(包含Product信息) |