
軟件設(shè)計(jì)原則培訓(xùn)
軟件設(shè)計(jì)原則、思路或佳實(shí)踐
一、 企業(yè)級架構(gòu)設(shè)計(jì)概述
1. 認(rèn)識分層架構(gòu)
2. 分層架構(gòu)的演化
3. 領(lǐng)域驅(qū)動架構(gòu)的演進(jìn)
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下實(shí)現(xiàn)隔離
軟件設(shè)計(jì)中的核心原則 SOLID
二、單一職責(zé)原則
1. 次時(shí)代租車服務(wù)終端 (ARCS)的初步設(shè)計(jì)
2. 用例 (UseCase) 的作用 – 劃分邊界及概覽
3. SRP的設(shè)計(jì)誤區(qū)
4. 重構(gòu)至 SRP 的方法1:提取類
5. 重構(gòu)至 SRP 的方法2:Proxy模式
6. 前端代碼 SRP重構(gòu):投票組件
7. 過程性代碼的 SRP
違反直覺的真相:性能優(yōu)化的步驟
三、開放封閉原則
1. 代碼中的接線板是什么?
2. 編程價(jià)值觀 – 溝通,簡單,靈活
3. 如何做到對擴(kuò)展開放,對修改封閉
4. 次時(shí)代租車服務(wù)終端 (ARCS)的促銷需求
5. 笨拙的促銷實(shí)現(xiàn)
6. 如何不修改代碼而改變它的行為
7. 簡單的 OCP實(shí)現(xiàn) – 策略模式
8. 前端代碼重構(gòu):拆分復(fù)雜表達(dá)式
敏捷開發(fā)的精髓 – 只被第一顆子彈擊中
四、里氏替換原則
1. 什么才是好的繼承關(guān)系
2. 子類為什么要能透明的替換基類
3. 次時(shí)代租車服務(wù)終端 (ARCS)的新需求 – 電動轎車費(fèi)用計(jì)算
4. 白盒復(fù)用 還是 黑盒復(fù)用
5. IS-A的精髓:針對屬性還是針對行為
6. 契約式設(shè)計(jì)繼承體系
7. 重構(gòu)方法:提升為兄弟類
8. 前端代碼重構(gòu):抽取函數(shù)
9. 如何才能讓 次時(shí)代租車服務(wù)終端 (ARCS)的代碼符合 LSP
這樣做我們可能會引入什么新的問題?
五、接口隔離原則
1. 接口“變胖”的問題 – 接口污染
2. 佳能一體機(jī)的遺留接口問題
3. 如何實(shí)現(xiàn)接口分離 – 適配器模式
4. 類適配器 – 多繼承
5. 對象適配器 – 委托
6. 使用單元測試來發(fā)現(xiàn)問題
7. 前端代碼重構(gòu):使用模板方法重新組織邏輯
8. 次時(shí)代租車服務(wù)終端 (ARCS)在接口劃分上的問題
9. 如何簡化復(fù)雜的邏輯
10. 如何使用模板方法分離抽象與具體
案例:ATM機(jī)接口設(shè)計(jì)的演化
六、依賴倒置原則
1. 結(jié)構(gòu)化設(shè)計(jì)理念的問題
2. 對象化設(shè)計(jì)理念
3. 依賴倒置到底倒置了什么
4. 如何分離關(guān)注點(diǎn)
5. DI-依賴注入解決的問題:講對象的創(chuàng)建與使用分離
案例:消息隊(duì)列設(shè)計(jì)的演化
領(lǐng)域?qū)拥脑O(shè)計(jì)與實(shí)踐
七、實(shí)體 – 數(shù)據(jù)容器還是行為載體
6. 貧血模型
7. 如何避免貧血,實(shí)體與領(lǐng)域服務(wù)之間的分寸
8. 唯一標(biāo)識
9. 委派標(biāo)識
10.案例:實(shí)現(xiàn)實(shí)體層超類型(Layer Supertype)
11.實(shí)戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 實(shí)體行為歸屬甄別
八、值對象 – 性能提升小幫手
1. 什么是值對象
2. 值對象的特征
3. 為什么值對象這么容易被忽略
4. 案例:地址建模與值對象
5. 案例:實(shí)現(xiàn)值對象層超類型
九、聚合 – 比類更高一層的封裝
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)
服務(wù)層的設(shè)計(jì)與實(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)換,驗(yà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. 案例:實(shí)現(xiàn)應(yīng)用服務(wù)
9. 應(yīng)用服務(wù)的關(guān)注點(diǎn)
10.實(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)建
十二、資源庫 – 聚合的起點(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. 案例:泛型資源庫
實(shí)戰(zhàn) -任務(wù)分配執(zhí)行系統(tǒng) 持久化
基于事件驅(qū)動的架構(gòu)設(shè)計(jì)
十三、領(lǐng)域事件 – 保持終一致性的信使
1. 領(lǐng)域事件是領(lǐng)域建模中極其重要的部分
2. 事務(wù)一致性,高并發(fā)下的窘境
3. 終一致性,妥協(xié)帶來高擴(kuò)展性
4. 原則:一個(gè)事務(wù)中只對一個(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)域邏輯
十四、微服務(wù)中基于事件的系統(tǒng)架構(gòu)
1. 微服務(wù)之間如何穩(wěn)健的發(fā)布與消費(fèi)事件
2. 如何保證發(fā)布事件的原子性
3. 使用事件表發(fā)布事件
4. 案例:如何實(shí)現(xiàn)事件感知聚合根
5. 案例:如何實(shí)現(xiàn)事件感知資源庫
6. 如何通過 AOP 進(jìn)行通用的事件處理
十五、微服務(wù)形式下的CQRS
1. DDD中的典型寫操作
2. 基于數(shù)據(jù)模型的讀操作
3. 基于領(lǐng)域模型的讀操作
4. 讀寫分離模型
5. 案例:電商系統(tǒng)中的讀寫分離場景
6. 單進(jìn)程單實(shí)體 + 共享存儲/共享模型:Inventory詳情查詢
7. 單進(jìn)程單實(shí)體 + 共享存儲/分離模型:Product摘要查詢
8. 單進(jìn)程跨實(shí)體 + 分離存儲/分離模型:Product詳情查詢(包含Category信息)
9. 跨進(jìn)程跨實(shí)體 + 分離存儲/分離模型:Order詳情查詢(包含Product信息)