課程簡介
一個背景:軟件產(chǎn)品化
一個中心:可擴展設(shè)計
一套實踐:拉通需求、設(shè)計和代碼,讓“需求的變更”變成“代碼的擴充”
目標(biāo)收益
一個背景:軟件產(chǎn)品化
一個中心:可擴展設(shè)計
一套實踐:拉通需求、設(shè)計和代碼,讓“需求的變更”變成“代碼的擴充”
培訓(xùn)對象
1.想聽架構(gòu)課程的所有學(xué)員,包括架構(gòu)師、技術(shù)經(jīng)理、開發(fā)高手、開發(fā)骨干
2.想從重復(fù)做項目,過渡到做產(chǎn)品的團隊
課程大綱
Big Picture——產(chǎn)品化:誤區(qū)與真相 |
產(chǎn)品化,就是死磕“可擴展” ? 可擴展的實質(zhì):需求有變更,代碼可方便擴充 ? 遠離代碼不行:代碼可擴充?架構(gòu)設(shè)計是條件,詳細設(shè)計是關(guān)鍵 成功的兩個條件和兩個關(guān)鍵 ? 【條件一】將產(chǎn)品擴展壓力,捕捉為需求 ? 【條件二】架構(gòu)要穩(wěn)定,即代碼擴充時架構(gòu)不變 ? 【關(guān)鍵一】模塊間接口是隔離模塊、使模塊可擴展的關(guān)鍵 ? 【關(guān)鍵二】模塊實現(xiàn)是否重用與可變分離,是第二個關(guān)鍵 |
【需求篇】 產(chǎn)品擴展壓力,如何盡早捕捉為需求? |
設(shè)計產(chǎn)品化軟件,洞察需求變更的幾點規(guī)律 1. 什么需求沒變? 2. 什么需求在變? 3. 分析和識別需求變更的實際技巧 設(shè)計產(chǎn)品化軟件,可這么加強需求文檔 1. 分析: 《SRS》案例一 vs. 《SRS》案例二 2. 練習(xí):學(xué)員將需求的變更,定義到這兩份文檔中 主要收獲:體會《SRS》的變更包容力不同 主要收獲:長期以來“輸入-處理-輸出”式需求的弊病 主要收獲:專業(yè)的話,用例技術(shù)這么用 分析、識別需求變更實戰(zhàn) 1. 小組任務(wù):應(yīng)用上述技巧,分析和識別功能變更 2. 小組提交:xxx組《用例圖 + 用例規(guī)約》 3. 小組對標(biāo):老師提供的《用例圖 + 用例規(guī)約》 |
【架構(gòu)篇】 為支持?jǐn)U展,產(chǎn)品化的架構(gòu)必須穩(wěn)定! |
設(shè)計師劃分模塊時,代碼結(jié)構(gòu)的全局劃分方法 1. 從模式開始——巧妙的“五橫一縱”分層模式 2. 模塊劃分——覆蓋上下文圖定義的接口需求 3. 模塊劃分——覆蓋功能樹、用例定義的功能需求 3.1. 起步:分析用例規(guī)約,識別實現(xiàn)用例需要哪些類 3.2. 后續(xù):協(xié)作設(shè)計,即用序列圖、協(xié)作圖串起這些類 3.3. ……即運用用例驅(qū)動設(shè)計思維 專項練習(xí) 1. 用例驅(qū)動 2. 到底是“用例?模塊?類”還是“用例?類?模塊” 設(shè)計師劃分模塊時,注意幾個基本原則 1. 通用-專用分離:提煉應(yīng)用無關(guān)的Library、或選擇三方庫 2. 通用-專用分離:機制與策略分離,開發(fā)或選擇Framework 3. 隔離外部交互:僅UI層“知道”操作細節(jié)和展現(xiàn)格式 4. 隔離外部交互:僅SI層“知道”和外部系統(tǒng)通信的細節(jié) 5. 隔離外部交互:僅DM層“知道”數(shù)據(jù)存儲格式 設(shè)計師劃分模塊時,可參考的優(yōu)秀范例一則 1. 著名開源產(chǎn)品套件——Mumble 主要收獲:模塊的劃分、通用庫的提煉、三方框架… 實戰(zhàn)演練 1. 任務(wù):模塊劃分,必須覆蓋代碼結(jié)構(gòu)全局、不能漏模塊 2. 貫穿案例推進…… |
【詳細設(shè)計上】 承載產(chǎn)品功能的代碼模塊,重用與可變分離! |
設(shè)計師設(shè)計模塊時,利用好OO Package結(jié)構(gòu)規(guī)律 1. 提供中心控制類,不要暴漏一堆小類 2. 接口類與實現(xiàn)類分離 3. 通用實現(xiàn)類與擴展實現(xiàn)類分離 4. …… 如何應(yīng)用上述結(jié)構(gòu),包容需求變更 1. 分析需求變更,擴充/增加/改變 用例規(guī)約 2. 分析對設(shè)計的影響 a) 增加了Optional Feature (最常見) b) 改變了Function Point c) 改變了Process Flow 3. 如何設(shè)計合理的OO Package支持上門三種變更 設(shè)計師設(shè)計模塊時,可參考的優(yōu)秀范例二則 1. 一個通用庫——類的組織 主要收獲:接口分離、提供中心控制類、可擴展支持 2. 著名開源產(chǎn)品——類的組織 主要收獲:抽象領(lǐng)域概念的提煉、可擴展支持 過關(guān)演練 1. 分析材料,熟悉設(shè)計要求 2. 設(shè)計一個通用模塊,必須可擴展…… |
【詳細設(shè)計下】 設(shè)計松耦合、可擴展的模塊接口 |
設(shè)計師設(shè)計接口時,考慮的三件事兒 1. 技術(shù)選擇:接口設(shè)計容易?做漂亮最難! 2. 機制選擇:調(diào)用/回調(diào)/同步/異步/輪詢/超時 3. 格式定義:函數(shù)風(fēng)格 vs.報文或消息風(fēng)格 設(shè)計師設(shè)計接口時,可參考的優(yōu)秀范例幾則 1. 某通用產(chǎn)品——漂亮的封裝、方便的配置 主要收獲:圍繞Domain Type定義模塊的核心接口 主要收獲:在核心接口基礎(chǔ)上,可定義便捷接口 注?英文術(shù)語為Core Interface、Convenience Interface 2. 某平臺接口分析——既能跨平臺又方便調(diào)用? 主要收獲:跨平臺協(xié)議 + 便于二次開發(fā)的API 1. MFC、Swing等API設(shè)計對比——更靈活的接口風(fēng)格 主要收獲:Message在接口設(shè)計中的作用 主要收獲:Callback回調(diào)、及“注冊-回調(diào)”接口機制 設(shè)計師設(shè)計接口時,這些經(jīng)驗可以用 1. 基于代碼:專項練習(xí)一 2. 基于代碼:專項練習(xí)二 3. 基于代碼:專項練習(xí)三 4. 原則與“坑”總結(jié) 實戰(zhàn)演練 1. 任務(wù)1:接口的命令化(Command)支持可擴展 2. 任務(wù)2:讓接口包含回調(diào)(Callback)使模塊通用化 3. 貫穿案例設(shè)計推進…… |
Big Picture——產(chǎn)品化:誤區(qū)與真相 產(chǎn)品化,就是死磕“可擴展” ? 可擴展的實質(zhì):需求有變更,代碼可方便擴充 ? 遠離代碼不行:代碼可擴充?架構(gòu)設(shè)計是條件,詳細設(shè)計是關(guān)鍵 成功的兩個條件和兩個關(guān)鍵 ? 【條件一】將產(chǎn)品擴展壓力,捕捉為需求 ? 【條件二】架構(gòu)要穩(wěn)定,即代碼擴充時架構(gòu)不變 ? 【關(guān)鍵一】模塊間接口是隔離模塊、使模塊可擴展的關(guān)鍵 ? 【關(guān)鍵二】模塊實現(xiàn)是否重用與可變分離,是第二個關(guān)鍵 |
【需求篇】 產(chǎn)品擴展壓力,如何盡早捕捉為需求? 設(shè)計產(chǎn)品化軟件,洞察需求變更的幾點規(guī)律 1. 什么需求沒變? 2. 什么需求在變? 3. 分析和識別需求變更的實際技巧 設(shè)計產(chǎn)品化軟件,可這么加強需求文檔 1. 分析: 《SRS》案例一 vs. 《SRS》案例二 2. 練習(xí):學(xué)員將需求的變更,定義到這兩份文檔中 主要收獲:體會《SRS》的變更包容力不同 主要收獲:長期以來“輸入-處理-輸出”式需求的弊病 主要收獲:專業(yè)的話,用例技術(shù)這么用 分析、識別需求變更實戰(zhàn) 1. 小組任務(wù):應(yīng)用上述技巧,分析和識別功能變更 2. 小組提交:xxx組《用例圖 + 用例規(guī)約》 3. 小組對標(biāo):老師提供的《用例圖 + 用例規(guī)約》 |
【架構(gòu)篇】 為支持?jǐn)U展,產(chǎn)品化的架構(gòu)必須穩(wěn)定! 設(shè)計師劃分模塊時,代碼結(jié)構(gòu)的全局劃分方法 1. 從模式開始——巧妙的“五橫一縱”分層模式 2. 模塊劃分——覆蓋上下文圖定義的接口需求 3. 模塊劃分——覆蓋功能樹、用例定義的功能需求 3.1. 起步:分析用例規(guī)約,識別實現(xiàn)用例需要哪些類 3.2. 后續(xù):協(xié)作設(shè)計,即用序列圖、協(xié)作圖串起這些類 3.3. ……即運用用例驅(qū)動設(shè)計思維 專項練習(xí) 1. 用例驅(qū)動 2. 到底是“用例?模塊?類”還是“用例?類?模塊” 設(shè)計師劃分模塊時,注意幾個基本原則 1. 通用-專用分離:提煉應(yīng)用無關(guān)的Library、或選擇三方庫 2. 通用-專用分離:機制與策略分離,開發(fā)或選擇Framework 3. 隔離外部交互:僅UI層“知道”操作細節(jié)和展現(xiàn)格式 4. 隔離外部交互:僅SI層“知道”和外部系統(tǒng)通信的細節(jié) 5. 隔離外部交互:僅DM層“知道”數(shù)據(jù)存儲格式 設(shè)計師劃分模塊時,可參考的優(yōu)秀范例一則 1. 著名開源產(chǎn)品套件——Mumble 主要收獲:模塊的劃分、通用庫的提煉、三方框架… 實戰(zhàn)演練 1. 任務(wù):模塊劃分,必須覆蓋代碼結(jié)構(gòu)全局、不能漏模塊 2. 貫穿案例推進…… |
【詳細設(shè)計上】 承載產(chǎn)品功能的代碼模塊,重用與可變分離! 設(shè)計師設(shè)計模塊時,利用好OO Package結(jié)構(gòu)規(guī)律 1. 提供中心控制類,不要暴漏一堆小類 2. 接口類與實現(xiàn)類分離 3. 通用實現(xiàn)類與擴展實現(xiàn)類分離 4. …… 如何應(yīng)用上述結(jié)構(gòu),包容需求變更 1. 分析需求變更,擴充/增加/改變 用例規(guī)約 2. 分析對設(shè)計的影響 a) 增加了Optional Feature (最常見) b) 改變了Function Point c) 改變了Process Flow 3. 如何設(shè)計合理的OO Package支持上門三種變更 設(shè)計師設(shè)計模塊時,可參考的優(yōu)秀范例二則 1. 一個通用庫——類的組織 主要收獲:接口分離、提供中心控制類、可擴展支持 2. 著名開源產(chǎn)品——類的組織 主要收獲:抽象領(lǐng)域概念的提煉、可擴展支持 過關(guān)演練 1. 分析材料,熟悉設(shè)計要求 2. 設(shè)計一個通用模塊,必須可擴展…… |
【詳細設(shè)計下】 設(shè)計松耦合、可擴展的模塊接口 設(shè)計師設(shè)計接口時,考慮的三件事兒 1. 技術(shù)選擇:接口設(shè)計容易?做漂亮最難! 2. 機制選擇:調(diào)用/回調(diào)/同步/異步/輪詢/超時 3. 格式定義:函數(shù)風(fēng)格 vs.報文或消息風(fēng)格 設(shè)計師設(shè)計接口時,可參考的優(yōu)秀范例幾則 1. 某通用產(chǎn)品——漂亮的封裝、方便的配置 主要收獲:圍繞Domain Type定義模塊的核心接口 主要收獲:在核心接口基礎(chǔ)上,可定義便捷接口 注?英文術(shù)語為Core Interface、Convenience Interface 2. 某平臺接口分析——既能跨平臺又方便調(diào)用? 主要收獲:跨平臺協(xié)議 + 便于二次開發(fā)的API 1. MFC、Swing等API設(shè)計對比——更靈活的接口風(fēng)格 主要收獲:Message在接口設(shè)計中的作用 主要收獲:Callback回調(diào)、及“注冊-回調(diào)”接口機制 設(shè)計師設(shè)計接口時,這些經(jīng)驗可以用 1. 基于代碼:專項練習(xí)一 2. 基于代碼:專項練習(xí)二 3. 基于代碼:專項練習(xí)三 4. 原則與“坑”總結(jié) 實戰(zhàn)演練 1. 任務(wù)1:接口的命令化(Command)支持可擴展 2. 任務(wù)2:讓接口包含回調(diào)(Callback)使模塊通用化 3. 貫穿案例設(shè)計推進…… |