軟體開發的架構與設計模式
- 什麼是軟體開發架構設計?
- 分層的意義
- 傳統與近代的架構分層
- 近代的軟體分層(Layer)
- 關鍵設計原則
- 構建系統的各種能力
- 什麼是框架
- 架構、框架、模式、基礎
- Lab:架構設計議題
- Lab:架構分層議題
- 參考:程式碼可維護性評量
軟體架構師
常用的設計模式 - DI
- 相依性管理
- 什麼是物件相依性
- Lab:DI與IoC
- 使用DI(依賴注入)服務
- Lab:使用DI服務
- 補充:DI服務的作用域
- DI注入是誰下的手?
- 透過設定實現注入
- Lab:透過設定檔動態注入
- 透過NuGet套件動態注入
- Lab:透過NuGet套件動態注入
常用的設計模式 - AOP
- 什麼是AOP與職責分離
- 以Attribute實現AOP
- Lab : 使用AOP切分關注點
- 參考:關於Attribute
- 參考:關於反射(Reflection)
- 如何建立AOP底層框架
- Lab:使用AOP處理例外
關於測試與可測試性
- 測試左移
- 單元測試與整合測試
- 測試金字塔
- 建立與使用單元測試
- 利用DI提升可測試性
- Lab:提升可測試性A
- 透過繼承建立fake物件
- Lab:提升可測試性B
- 使用測試隔離框架
- Lab:使用測試隔離框架
- 關於Mock物件
- Lab:使用隔離框架Mock物件
- 架構與可測試性
- 自動化單元測試
- Lab:建立覆蓋率報表
- 自動化整合測試
- Lab:自動化整合測試
實踐系統的可擴展性
- NuGet套件庫的價值與意義
- 建立Nuget套件
- Lab:建立Nuget套件
- DI與系統可擴展性
- Lab:使用套件實踐擴充性
- 模塊的可抽換性
- 單體式應用(Monolith)與微服務
- 案例:可擴展性的WinForm系統
- 案例:M365-可擴展性的Web系統
系統的身分驗證與安全性
- .net WebApp的身分驗證
- Lab:使用Cookies驗證
- 一次搞懂OAuth與SSO在幹什麼?
- 具體使用OAuth進行身分驗證
- Lab:建立應用程式並取得Token
- Lab:使用Microsoft AAD驗證
- Lab:使用Google驗證
- Lab:使用LINE驗證
- 用JWT Token進行身分驗證
- Lab:使用JWT實現SPA系統的身分驗證
- 分散式系統的身分驗證
- API呼叫的身分驗證
關於微服務
- 什麼是微服務?
- 補充:Clean Architecture
- 補充:DDD中的Repository與Services
- 利用容器化實踐微服務
- Lab:使用VS建立容器化應用
- Demo:使用AKS運行容器
- 建立微服務式的系統UI
- 微服務的身分驗證
- 利用APIM實作微服務介面
- 微服務的Configuration
雲端架構
- Cloud Native與Cloud Based
- 使用Web App實現HA架構
- 使用VM實現HA架構
- 微服務的通訊機制
- 事件與訊息架構
- Demo:Event Grid
- Demo:在軟體分層中以觀察者模式實現事件
- 訊息架構
- 使用Queue與Service Bus
架構的推動與框架的使用
dotnet 的專案與項目範本
開發者體驗(DX)
- 使用Snippet Designer建構程式碼片段
- Lab:建立自己的Code Snippet
- 建立VS Code當中的Snippet
- 團隊開發流程(working flow)
- 使用Pipeline建立自動化開發流程
- Lab:建立自動化 CI Pipeline
- Lab:在CI中建立自動化測試覆蓋率
- 自動化UI/Function測試
- Lab:在Pipeline中建立自動化整合測試
- Lab:在Pipeline做自動化程式碼掃描
- 使用ChatGPT對PR進行自動化Code Scan
- GitHub Copilot
- 未來的軟體開發願景