課程目錄:軟件設計原則培訓
        4401 人關注
        (78637/99817)
        課程大綱:

          軟件設計原則培訓

         

         

         

        軟件設計原則、思路或佳實踐


        一、 企業級架構設計概述

        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信息)