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